• 全部
  • 语言基础/算法/系统设计
  • 数据库相关
  • 图形处理/多媒体
  • 网络通信/分布式开发
  • VCL组件开发及应用
  • Windows SDK/API
  • 问答

报告一个关于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还是怎么回事,请高手们指点迷津。
...全文
141 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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的控件包中获得。
回复
相关推荐
发帖
Delphi
创建于2007-08-02

4876

社区成员

Delphi 开发及应用
申请成为版主
帖子事件
创建了帖子
2006-07-11 10:51
社区公告
暂无公告