我预计结果会是 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 向上舍入,如果 < 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 在 Delphi 中不能表示为浮点值。 A page on my Web site显示该值的实际含义,如 Extended、Double 和 Single:
87.285 = + 87.28500 00000 00000 00333 06690 73875 46962 12708 95004 27246 09375 87.285 = + 87.28499 99999 99996 58939 48683 51519 10781 86035 15625 87.285 = + 87.28500 36621 09375
默认情况下,Delphi 中的浮点文字具有扩展类型,如您所见,您的数字的扩展版本略高于 87.285,因此舍入到最接近的值会向上舍入是正确的。但作为Double,实际数字略低。这就是为什么如果在调用 RoundTo
之前将数字显式存储在 Double 变量中,就会得到预期的数字。 Delphi 的每种浮点类型都有该函数的重载。
关于delphi - 为什么 RoundTo(87.285, -2) => 87.28 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25519621/