gpt4 book ai didi

delphi - SetRoundMode(rmUp) 并将 "round"值舍入为 10,结果为何为 10,0001?

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

这段代码:

 SetRoundMode(rmUp);
Memo1.Lines.Add(CurrToStr(SimpleRoundTo(10)));

结果为 10,0001。

我根本不明白。

我认为 rmUp 会执行类似将 10,0001 舍入到 11 的操作,但绝不会将 10 舍入到 10,0001。

谁能解释一下为什么会发生这种情况?

谢谢。

最佳答案

SimpleRoundTo 的工作方式如下:

  1. 将输入值除以 10-x,其中 x 是结果中要保留的小数位数。
  2. 向该产品添加 0.5。
  3. 截断总和。
  4. 乘以 10-x

结果是一个浮点值。与大多数浮点值一样,即使在您的情况下您从精确值开始,结果也不会精确。为 SimpleRoundTo 指定的小数位数为负数,因此对于您的示例输入,步骤 1 中的除数理想情况下为 0.01。但这不能精确地表示为 float ,因此当在步骤 1 中计算 10/0.01 时,结果并不精确为 1000。但是,步骤 3 中的结果将精确为 1000,因此,划分并不重要。不过,步骤 4 中的乘法是不精确的。该产品将不准确。它将略高于 10。

因此,SimpleRoundTo 返回稍高的值,并且由于您已指定舍入应向上,因此 Extended 结果的转换将 SimpleRoundTo 添加到 CurrToStrCurrency 输入结果正好是 10.0001。

货币值是准确的;它们代表一个定点值,一个按小数点后四位缩放的整数。

关于delphi - SetRoundMode(rmUp) 并将 "round"值舍入为 10,结果为何为 10,0001?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/565797/

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