str(9.234:5:1,s); // -> s = ' 9.2'@H_419_12@如果舍入是非模糊的,那么一切都很好,但如果它不是(0.5 – >向上或向下?)则存在一个问题:它似乎依赖于BP中的浮点数据类型,但在Delphi中显然是一致的2007年:
BP:
var e: extended; d: double;begin d := 2.15; e := 2.15; str(d:5:1,s); { -> s = ' 2.1' } str(e:5:1,s); { -> s = ' 2.2' } { but: } d := 2.25 e := 2.25 str(d:5:1,s); { -> s = ' 2.3' } str(e:5:1,s); { -> s = ' 2.3' }@H_419_12@我无法找到关于双打如何被舍入的任何规则,而显然扩展总是四舍五入.
Delphi 2007显然总是独立于数据类型.
有没有人知道如何在BP中进行舍入以获得双值?
我想知道,因为我正在移植一些使用双精度到Delphi 2007的Borland Pascal代码,当我比较输出时,我得到了STR过程中舍入导致的不一致.这些对结果并不重要,但却很难发现重要的差异.
解决方法 d = 2.15和d = 2.25的情况不同:2.15不能以float格式精确表示,因此如果不分析给定float格式的float值的二进制表示,就不可能说明该值是如何舍入的;
2.25以float格式精确表示,舍入结果必须是可预测的;
我测试了一些以浮点格式精确表示的值的舍入,发现STR总是向上舍入为正值,向下舍入为负值. STR不遵循“银行家的舍入”,例如:
d := 2.25;// d:= roundto(d,-1); banker's rounding is 2.2 str(d:5:1,s); { -> s = ' 2.3' } d:= 2.75;// d:= roundto(d,-1); banker's rounding is 2.8 str(d:5:1,s); { -> s = ' 2.8' }@H_419_12@ 总结以上是内存溢出为你收集整理的Delphi / Borland Pascal STR程序是如何进行的全部内容,希望文章能够帮你解决Delphi / Borland Pascal STR程序是如何进行的所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
概述Borland Pascal 7和Delphi 2007都有程序STR,它采用数字,长度和精度,并将其转换为如下字符串: str(9.234:5:1, s); // -> s = ' 9.2' 如果舍入是非模糊的,那么一切都很好,但如果它不是(0.5 – >向上或向下?)则存在一个问题:它似乎依赖于BP中的浮点数据类型,但在Delphi中显然是一致的2007年: BP: var e: ext Borland Pascal 7和Delphi 2007都有程序STR,它采用数字,长度和精度,并将其转换为如下字符串:
赞
(0)
打赏
微信扫一扫
支付宝扫一扫
delphi – 启动进程并侦听退出事件
上一篇
2022-06-07
delphi – 在文本文件中保存对象的TList
下一篇
2022-06-07
评论列表(0条)