Delphi Format函数功能及用法详解

DELPHIFormat函数功能及用法详解

DELPHI中Format函数功能及用法详解function Format(const Format: string; const Args: array of const): string; $[SysUtils.pas
功能:返回按指定方式格式化一个数组常量的字符形式
说明 这个函数是Delphi中用得最多的函数,现在就列举几个例子以得到直观的理解

"%" [索引 ":"] ["-"] [宽度] ["." 摘要] 类型
它是以"%"开始,而以"类型"结束,"类型"表示一个具体的类型。中间是用来格式化"类型"的指令字符,是可选的。

总结一下Format的用法:
--------------------------------------------------------------------------------------
Format('x=%d', [12]);      //'x=12' //最普通
Format('x=%3d', [12]);     //'x= 12' //指定宽度
Format('x=%f', [12.0]);     //'x=12.00' //浮点数
Format('x=%.3f', [12.0]);    //'x=12.000' //指定小数
Format('x=%8.2f'[12.0])     // 'x=     12.00' ;
Format('x=%.*f', [5, 12.0]); //'x=12.00000' //动态配置
Format('x=%.5d', [12]);     //'x=00012' //前面补充0
Format('x=%.5x', [12]);      //'x=0000C' //十六进制
Format('x=%1:d%0:d', [12, 13]); //'x=1312' //使用索引
Format('x=%p', [nil]);     //'x=00000000' //指针
Format('x=%1.1e', [12.0]); //'x=1.2E+001' //科学记数法
Format('x=%%', []); //'x=%' //得到"%"
S := Format('%s%d', [S, I]); //S := S + StrToInt(I); //连接字符串

--------------------------------------------------------------------------------------

===================详细用法=======================

先来看看type,type可以是以下字符:
d 十制数,表示一个整型值
u 和d一样是整型值,但它是无符号的,而如果它对应的值是负的,则返回时是一个2的32次方减去这个绝对值的数,如:
Format('this is %u',[-2]);
返回的是:this is 4294967294

f 对应浮点数
e 科学表示法,对应整型数和浮点数,比如
Format('this is %e',[-2.22]);
返回的是:this is -2.22000000000000E+000,等一下再说明如果将数的精度缩小

g 这个只能对应浮点型,且它会将值中多余的数去掉,比如
Format('this is %g',[02.200]);
返回的是:this is 2.2

n 只能对应浮点型,将值转化为号码的形式。看一个例子就明白了
Format('this is %n',[4552.2176]);
返回的是this is 4,552.22

注意有两点,一是只表示到小数后两位,等一下说怎么消除这种情况, 二是,即使小数没有被截断,它也不会也像整数部分一样有逗号来分开的

m钱币类型,但关于货币类型有更好的格式化方法,这里只是简单的格式化,另外它只对应于浮点值
Format('this is %m',[9552.21]);
返回:this is ¥9,552.21

p 对应于指针类型,返回的值是指针的地址,以十六进制的形式来表示
例如:
var X:integer;
p:^integer;
begin
   X:=99;
p:=@X;
   Edit1.Text:=Format('this is %p',[p]);
end;
Edit1的内容是:this is 0012F548

s 对应字符串类型,不用多说了吧
x 必须是一个整形值,以十六进制的形式返回
Edit1.Text:=Format('this is %X',[15]);
返回是:this is F

类型讲述完毕,下面介绍格式化Type的指令:
[index ":"]这个要怎么表达呢,看一个例子
Format('this is %d %d',[12,13]);
其中第一个%d的索引是0,第二个%d是1,所以字符显示的时候是这样 this is 12 13
而如果你这样定义:
Format('this is %1:d %0:d',[12,13]);
那么返回的字符串就变成了this is 13 12。现在明白了吗,[index ":"] 中的index指示Args中参数显示的顺序还有一种情况,如果这样
Format('%d %d %d %0:d %d', [1, 2, 3, 4])
将返回1 2 3 1 2。
如果你想返回的是1 2 3 1 4,必须这样定:
Format('%d %d %d %0:d %3:d', [1, 2, 3, 4])

但用的时候要注意,索引不能超出Args中的个数,不然会引起异常如
Format('this is %2:d %0:d',[12,13]);
由于Args中只有12 13 两个数,所以Index只能是0或1,这里为2就错了[width] 指定将被格式化的值占的宽度,看一个例子就明白了

Format('this is %4d',[12]);
输出是:this is   12,这个是比较容易,不过如果Width的值小于参数的长度,则没有效果。
如:

Format('this is %1d',[12]);
输出是:this is 12

["-"]这个指定参数向左齐,和[width]合在一起最可以看到效果:
Format('this is %-4d,yes',[12]);
输出是:this is 12   ,yes
["." prec] 指定精度,对于浮点数效果最佳:
Format('this is %.2f',['1.1234]);
输出 this is 1.12
Format('this is %.7f',['1.1234]);
输出了 this is 1.1234000
而对于整型数,如果prec比如整型的位数小,则没有效果反之比整形值的位数大,则会在整型值的前面以0补之
Format('this is %.7d',[1234]);
输出是:this is 0001234]
          
对于字符型,刚好和整型值相反,如果prec比字符串型的长度大则没有效果,反之比字符串型的长度小,则会截断尾部的字符
Format('this is %.2s',['1234']);
输出是 this is 12,而上面说的这个例子:
Format('this is %e',[-2.22]);
返回的是:this is -2.22000000000000E+000,怎么去掉多余的0呢,这个就行啦

Format('this is %.2e',[-2.22]);
     
好了,第一个总算讲完了,应该对他的应用很熟悉了吧
///
二 FormatDateTime的用法
他的声明为:

function FormatDateTime(const Format: string; DateTime: TDateTime): string;
overload;
当然和Format一样还有一种,但这里只介绍常用的第一种,Format参数是一个格式化字符串。DateTime是时间类型。返回值是一种格式化后的字符串,重点来看Format参数中的指令字符
c 以短时间格式显示时间,即全部是数字的表示
FormatdateTime('c',now);
输出为:2004-8-7 9:55:40

d 对应于时间中的日期,日期是一位则显示一位,两位则显示两位
FormatdateTime('d',now);
输出可能为1~31
dd 和d的意义一样,但它始终是以两位来显示的
FormatdateTime('dd',now);
输出可能为01~31
ddd 显示的是星期几
FormatdateTime('ddd',now);
输出为: 星期六

dddd 和ddd显示的是一样的。 但上面两个如果在其他国家可能不一样。ddddd 以短时间格式显示年月日
FormatdateTime('ddddd',now);
输出为:2004-8-7

dddddd 以长时间格式显示年月日
FormatdateTime('dddddd',now);
输出为:2004年8月7日
e/ee/eee/eeee 以相应的位数显示年
FormatdateTime('ee',now);
输出为:04 (表示04年)
m/mm/mmm/mmmm 表示月
FormatdateTime('m',now);
输出为:8
FormatdateTime('mm',now);
输出为 08
FormatdateTime('mmm',now);
输出为 八月
FormatdateTime('mmmm',now);
输出为 八月

和ddd/dddd 一样,在其他国家可能不同yy/yyyy 表示年
FormatdateTime('yy',now);
输出为 04
FormatdateTime('yyyy',now);
输出为 2004,

h/hh,n/nn,s/ss,z/zzz 分别表示小时,分,秒,毫秒

t 以短时间格式显示时间
FormatdateTime('t',now);
输出为 10:17

tt 以长时间格式显示时间
FormatdateTime('tt',now);
输出为10:18:46
ampm 以长时间格式显示上午还是下午
FormatdateTime('ttampm',now);
输出为:10:22:57上午
大概如此,如果要在Format中加普通的字符串,可以用双引号隔开那些特定义的字符,这样普通字符串中如果含特殊的字符就不会被显示为时间格式啦:
FormatdateTime('"today is" c',now);
输出为:today is 2004-8-7 10:26:58

时间中也可以加"-"或"\"来分开日期:
FormatdateTime('"today is" yy-mm-dd',now);
FormatdateTime('"today is" yy\mm\dd',now);
输出为: today is 04-08-07

也可以用":"来分开时间
FormatdateTime('"today is" hh:nn:ss',now);
输出为:today is 10:32:23

/
三.FormatFloat 的用法

常用的声明:
function FormatFloat(const Format: string; Value: Extended): string; overload;

和上面一样Format参数为格式化指令字符,Value为Extended类型为什么是这个类型,因为它是所有浮点值中表示范围最大的,如果传入该方法的参数比如Double或者其他,则可以保存不会超出范围。
关键是看Format参数的用法
0 这个指定相应的位数的指令。
    比如:
FormatFloat('000.000',22.22);
输出的就是022.220
注意一点,如果整数部分的0的个数小于Value参数中整数的位数,则没有效果如:
FormatFloat('0.00',22.22);
输出的是:22.22

但如果小数部分的0小于Value中小数的倍数,则会截去相应的小数和位数如:
FormatFloat('0.0',22.22);
输出的是:22.2
  
也可以在整数0中指定逗号,这个整数位数必须大于3个,才会有逗号出句
FormatFloat('0,000.0',2222.22);
输出是:2,222.2

如果这样
FormatFloat('000,0.0',2222.22);
它的输出还是:2,222.2
注意它的规律,#和0的用法一样,目前我还没有测出有什么不同。

FormatFloat('##.##',22.22);
输出是:22.00
E 科学表示法,看几个例子大概就明白了
FormatFloat('0.00E+00',2222.22);
输出是 2.22E+03
FormatFloat('0000.00E+00',2222.22);
输出是 2222.22E+00
FormatFloat('00.0E+0',2222.22);
22.2E+2
明白了吗,全靠E右边的0来支配的。

转载于:https://www.cnblogs.com/guorongtao/p/4803331.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/491793.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python绘制决策树的节点

import matplotlib.pyplot as pltdecisionNode dict(boxstyle"sawtooth", fc"0.8") # 决策节点的属性。boxstyle为文本框的类型,sawtooth是锯齿形,fc是边框线粗细 # 可以写为decisionNode{boxstyle:sawtooth,fc:0.8} leafNode dic…

IBM对话智能+未来:十年提升AI性能效率千倍?

来源:云科技时代140多前的1879年,爱迪生经过几千次试验发明了电灯;之后过了90年的1969年美国把人类送到了月球,1970年空中客车公司诞生。在1870年代,人类初次进入电力时代的时候,没有人能够想到有一天人类可…

【转】chrome浏览器的跨域设置——包括版本49前后两种设置

做前后分离的webapp开发的时候,出于一些原因往往需要将浏览器设置成支持跨域的模式,好在chrome浏览器就是支持可跨域的设置,网上也有很多chrome跨域设置教程。但是新版本的chrome浏览器提高了跨域设置的门槛,原来的方法不再适用了…

中国信通院:2019年Q1全球人工智能产业数据报告

来源:网络大数据近日,中国信息通信研究院数据研究中心发布了《全球人工智能产业数据报告(2019Q1)》。报告以中国信息通信研究院数研中心人工智能产业数据库为基础,从企业研究、投融资研究、论文等角度出发,结合产业发展热点&#…

数据库一对一,一对多,多对多关系

关联映射:一对多/多对一 存在最普遍的映射关系,简单来讲就如球员与球队的关系; 一对多:从球队角度来说一个球队拥有多个球员 即为一对多 多对一:从球员角度来说多个球员属于一个球队 即为多对一 数据表间一对多关系如下…

Python找出某元素的索引下标

方法:list.index(‘xxx’) L [a, b, c] index L.index(c) print(index) # 输出2

一文读懂产业互联网的前世今生!

来源:全球物联网观察摘要:随着云计算等企业级技术应用的发展普及, 产业互联网实际已经在各行各业展开实践。广度上不仅覆盖服务业、工业和农业,还从商业扩展到公益和政府,整个社会走向全面互联;深度上从营销…

RAC 的文章

http://limboy.me/ios/2013/12/27/reactivecocoa-2.html http://limboy.me/ios/2014/06/06/deep-into-reactivecocoa2.html转载于:https://www.cnblogs.com/xingkonghao818/p/4808857.html

Python判断变量类型

两种方法: 一: L [a, b, c] print(isinstance(L, list)) #输出True二: L [a, b, c] print(type(L).__name__ list) #输出True

阅读 LdrInitializeThunk

参考: http://blog.csdn.net/hw_henry2008/article/details/6568255 Windows 的 DLL 装入(除 ntdll.dll 外)和连接是通过 ntdll.dll 中的一个函数LdrInitializeThunk()实现的. 在进入这个函数之前,目标 EXE 映像已经被映射到当前进程的用户空间&#xff…

反对量子计算的理由

来源: 悦智网量子计算如今十分流行。几乎每天都有新闻媒体发布相关新闻。其实人类研究量子计算已经长达几十年,却未得出任何实用的结果,大多数评论员都忘记或者掩饰了这一事实。 IBM指出量子计算机能够“使很多学科领域取得突破性进展&#x…

吴恩达《机器学习》学习笔记一——初识机器学习

吴恩达《机器学习》学习笔记一一、 什么是机器学习?二、监督学习三、无监督学习初识机器学习这是个人学习吴恩达《机器学习》课程的一些笔记,供自己和大家学习提升。第一篇内容较少,日后继续加油。课程链接:https://www.bilibili.…

Python存储生成的决策树——pickle模块

假设通过训练样本生成的决策树为: {no surfacing: {0: no, 1: {flippers: {0: no, 1: yes}}}} 利用pickle模块可以存储和加载该决策树 tree {no surfacing: {0: no, 1: {flippers: {0: no, 1: yes}}}}def storeTree(inputTree, filename):import picklefw open…

让引擎不再是你的唯一,对百度再见

信息的传播是人的本性,特别是,对于自己的喜恶事事务。华斯康技术已经做了一项调查,在空调、身体、洗发水、房屋及其他产品的购买过程,分别为,53%、49%、35%和32%消费者,新产品信息。而且分别有35%、28%、15…

院士张钹:AI奇迹短期难再现 深度学习技术潜力已近天花板

来源:软件定义世界(SDX)在Alphago与韩国围棋选手李世石对战获胜三年过后,一些迹象逐渐显现,张钹院士认为到了一个合适的时点,并接受了此次的专访。张钹,计算机科学与技术专家,俄罗斯…

Python获得某个范围的的随机整数

numpy.random.randint(low, highNone, sizeNone, dtypel) 产生[low~high)范围内的整数,不包括high import numpy as npa np.random.randint(0, 2, 10) print(a) # [0 0 1 1 0 0 1 0 0 0]

吴恩达《机器学习》学习笔记二——单变量线性回归

吴恩达《机器学习》学习笔记二——单变量线性回归一、 模型描述二、 代价函数1.代价函数和目标函数的引出2.代价函数的理解(单变量)3.代价函数的理解(两个参数)三、 梯度下降——求解最优参数1.梯度下降的步骤2.梯度下降的数学表达…

吴恩达《机器学习》学习笔记三——多变量线性回归

吴恩达《机器学习》学习笔记三——多变量线性回归一、 多元线性回归问题介绍1.一些定义2.假设函数二、 多元梯度下降法1. 梯度下降法实用技巧:特征缩放2. 梯度下降法的学习率三、 特征选择与多项式回归四、 正规方程法1. 一些定义2. 正规方程解的公式3. 梯度下降法和…

五大核心构成的AIoT,正在遭遇三大挑战,两条突破口外还有什么?

来源:物联网智库随着IoT与AI逐步走向融合,AIoT正将以全新的方式改变人们的生活。一、新业务需求近年来,物联网呈现突飞猛进的发展态势。根据中商情报网的数据,2018年全球物联网设备已经达到70亿台;到2020年&#xff0c…

机器学习中防止过拟合的方法总结

来自机器学习成长之路公众号 在对模型进行训练时,有可能遇到训练数据不够,即训练数据无法对整个数据的分布进行估计的时候,或者在对模型进行过度训练(overtraining)时,常常会导致模型的过拟合(…