我预计结果将是87.29.我也试过SimpleRoundTo,但产生了相同的结果.
在帮助中还有一个"奇怪"的例子:ms-help://embarcadero.rs2010/vcl/Math.RoundTo.html
RoundTo(1.235, -2) => 1.24
RoundTo(1.245, -2) => 1.24 //???
Run Code Online (Sandbox Code Playgroud)
有谁知道我需要哪个函数来获得87.29的结果?我的意思是:如果最后一个数字> = 5向上,如果<5向下舍入.正如在学校教的:)
我使用Delphi2010,和SetRoundMode(rmNearest).我也尝试过rmTruncate.值87.285存储在double变量中.
也很奇怪:
SimpleRoundTo(87.285, -2) => 87.29
Run Code Online (Sandbox Code Playgroud)
但
x := 87.285; //double
SimpleRoundTo(x, -2) => 87.28
Run Code Online (Sandbox Code Playgroud)
Rob*_*edy 27
精确值87.285不能表示为Delphi中的浮点值.我的网站上的一个页面显示了该值的真正含义,如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中的浮点文字类型为Extended,正如您所看到的,您的数字的扩展版本略高于87.285,因此舍入到最近的舍入是正确的.但作为双倍,实际数字略低.这就是为什么如果在调用之前将数字显式存储在Double变量中,则会获得预期的数字RoundTo.每个Delphi的浮点类型都有该函数的重载.
Dav*_*nan 21
87.285不完全可表示,最近的双精度略小.
关于浮点的经典参考是每个计算机科学家应该知道的浮点运算.
对于基于货币的计算,如果确实如此,则应使用基数10数字类型而不是基数2浮点数.在Delphi中意味着Currency.
| 归档时间: |
|
| 查看次数: |
15604 次 |
| 最近记录: |