报告一个关于WideFormat函数的Bug???

jerrymousenet2 2006-07-11 10:51:40
SysUtils.WideFormat(WideString('%.0n Bytes'), [12000 * 1.0]);
请大家说说这个语句的输出结果(请运行后再回答),理论上来讲应该是输出 12,000 Bytes的,但我在d7中跑出来的结果却是 Bytes.前面的那一段结果为空值,跟了一下源代码,里面有汇编代码,所以没有仔细看下去。而使用Format('%.0n Bytes', [12000 * 1.0]);结果是正确的。
另外,还测试了一下SysUtils.WideFormat(WideString('%n Bytes'), [12000 * 1.0]);结果是12,000.00 Bytes,也是正确的。但是加上.0后,结果却不对了。不知道是d7的bug还是怎么回事,请高手们指点迷津。
...全文
182 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
HsWong 2006-07-11
  • 打赏
  • 举报
回复
结果是对的啦~~

看一下Format strings的格式:
"%" [index ":"] ["-"] [width] ["." prec] type

分析一下你上面的'%.0n Bytes'

. 表精度符号,后面应跟一长度位数,你这里输入0

当然输出时,Bytes前为空了

你变成'%.9n'试试就会明白了
HsWong 2006-07-11
  • 打赏
  • 举报
回复
如果不是Bug的话,只有这样解释了
老之 2006-07-11
  • 打赏
  • 举报
回复
从输出结果来看,我觉得WideFormat和Format的格式是不相同的。WideFormat中小数点后的数字是格式化后字符串的宽度(有多少个字符)。Format这个用的比较多,小数点后的是小数位数。这可能与WideString和string的结构也有关。
jerrymousenet2 2006-07-11
  • 打赏
  • 举报
回复
Edit1.Text := SysUtils.WideFormat(WideString('%.9n Bytes'), [12000 * 1.0]);//输出结果为:12,000.00 Bytes
Edit1.Text := format('%.9n' + ' Bytes', [12000 * 1.0]); //输出结果为:12,000.000000000 Bytes
这两个输出结果不太好解释。您认为呢?
jerrymousenet2 2006-07-11
  • 打赏
  • 举报
回复
说说我的理解:%.0n 是指整数部分位数不限长,而小数部分为0位(.0不加的话,默认为2位),如果按你的理解Format('%.0n Bytes', [12000 * 1.0]);的值为12,000.00 Bytes如何解释呢?俺找到答案,WideFormat确实是有点问题。俺现在是使用TntSysUtils.Tnt_WideFormat来进行替代。Tnt_WideFormat可以从Tnt的控件包中获得。

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧