当前位置:  开发笔记 > 编程语言 > 正文

SetRoundMode(rmUp)和舍入"round"值如10,结果10,0001怎么来的?

如何解决《SetRoundMode(rmUp)和舍入"round"值如10,结果10,0001怎么来的?》经验,为你挑选了1个好方法。

这段代码:

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

结果10,0001.

我根本就没有得到它.

我认为rmUp会做类似的事情,围绕10,0001到11,但从不到10到10,000.

谁能解释为什么会这样?

谢谢.



1> Rob Kennedy..:

SimpleRoundTo 像这样工作:

    将输入值除以10 -x,其中x是结果中要保留的小数位数.

    将0.5添加到该产品中.

    截断总和.

    乘以10 -x.

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

所以SimpleRoundTo返回一个略高的值,因为你已经指定了四舍五入应该走,在转换Extended的结果SimpleRoundToCurrency输入CurrToStr结果正好10.0001.

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

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有