gpt4 book ai didi

delphi - 为什么 RoundTo(87.285, -2) => 87.28 的结果

转载 作者:行者123 更新时间:2023-12-03 17:59:10 25 4
gpt4 key购买 nike

我预计结果会是 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 0937587.285 = + 87.28499 99999 99996 58939 48683 51519 10781 86035 1562587.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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com