我预计结果将是87.29。我也尝试了SimpleRoundTo,但是产生了相同的结果。

帮助中还有一个“奇怪的”示例:
ms-help://embarcadero.rs2010/vcl/Math.RoundTo.html

RoundTo(1.235, -2) => 1.24
RoundTo(1.245, -2) => 1.24 //???

有人知道我需要哪个函数来获得87.29的结果吗?我的意思是:如果最后一位数字> = 5向上舍入,如果
我使用Delphi2010和SetRoundMode(rmNearest)。我也尝试过rmTruncate
值87.285存储在double变量中。

也很奇怪:
SimpleRoundTo(87.285, -2) => 87.29


x := 87.285; //double
SimpleRoundTo(x, -2) => 87.28

最佳答案

87.285不能精确表示,并且最接近的 double 数略小。

关于浮点的经典引用是What Every Computer Scientist Should Know About Floating-Point Arithmetic

对于基于货币的计算,如果确实如此,则应使用以10为基数的数字类型,而不是以2为基数的浮点。在Delphi中,这意味着Currency

10-08 00:55