Delphi / Borland Pascal STR程序是如何进行的
发布时间:2020-12-15 09:26:52 所属栏目:大数据 来源:网络整理
导读:Borland Pascal 7和Delphi 2007都有程序STR,它采用数字,长度和精度,并将其转换为如下字符串: str(9.234:5:1,s); // - s = ' 9.2' 如果舍入是非模糊的,那么一切都很好,但如果它不是(0.5 – 向上或向下?)则存在一个问题:它似乎依赖于BP中的浮点数据类型,但
Borland Pascal 7和Delphi 2007都有程序STR,它采用数字,长度和精度,并将其转换为如下字符串:
str(9.234:5:1,s); // -> s = ' 9.2' 如果舍入是非模糊的,那么一切都很好,但如果它不是(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' } 我无法找到关于双打如何被舍入的任何规则,而显然扩展总是四舍五入. 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' } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |