delphi – SetRoundMode(rmUp)和舍入“round”值如10,结果10,000
这段代码:
SetRoundMode(rmUp); Memo1.Lines.Add(CurrToStr(SimpleRoundTo(10))); 结果10,0001. 我根本就没有得到它. 我认为rmUp会做类似的事情,围绕10,0001到11,但从不到10到10,000. 谁能解释为什么会这样? 谢谢. 解决方法
SimpleRoundTo的工作原理如下:
>将输入值除以10-x,其中x是结果中要保留的小数位数. 结果是浮点值.与大多数浮点值一样,结果也不准确,即使在您的情况下,您也会以精确值开头.为SimpleRoundTo指定的小数位数为负数,因此步骤1中的除数(对于示例输入)理想情况下为0.01.但是这不能完全表示为浮点数,因此当在步骤1中计算10 / 0.01时,结果不完全是1000.但是,步骤3中的结果将恰好为1000,因此不精确分裂并不重要.但是,步骤4中乘法的不精确性.那个产品不准确.它会略高于10. 因此,SimpleRoundTo返回稍高的值,并且由于您已指定舍入应该上升,因此将SimpleRoundTo的扩展结果转换为CurrToStr的Currency输入将导致正好10.0001. 货币价值是准确的;它们代表一个定点值,一个按小数点后四位缩放的整数. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |