我预计结果将是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
。