Borland Pascal 7 和 Delphi 2007 都有程序 STR,它接受一个数字、一个长度和精度,并将其转换为如下所示的字符串:
str(9.234:5:1, s); // -> s = ' 9.2'
如果舍入没有歧义,一切都很好,但如果不是(0.5 -> 向上或向下?),则存在问题:它似乎取决于 BP 中的浮点数据类型,但在 Delphi 2007 中显然是一致的:
血压:
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 中对双值进行舍入吗?
我想知道,因为我正在将一些使用双精度的 Borland Pascal 代码移植到 Delphi 2007,当我比较输出时,我得到了 STR 过程中舍入导致的不一致。这些对结果并不重要,但很难发现重要的差异。