作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这段代码:
SetRoundMode(rmUp);
Memo1.Lines.Add(CurrToStr(SimpleRoundTo(10)));
结果为 10,0001。
我根本不明白。
我认为 rmUp 会执行类似将 10,0001 舍入到 11 的操作,但绝不会将 10 舍入到 10,0001。
谁能解释一下为什么会发生这种情况?
谢谢。
最佳答案
SimpleRoundTo
的工作方式如下:
结果是一个浮点值。与大多数浮点值一样,即使在您的情况下您从精确值开始,结果也不会精确。为 SimpleRoundTo
指定的小数位数为负数,因此对于您的示例输入,步骤 1 中的除数理想情况下为 0.01。但这不能精确地表示为 float ,因此当在步骤 1 中计算 10/0.01 时,结果并不精确为 1000。但是,步骤 3 中的结果将精确为 1000,因此,划分并不重要。不过,步骤 4 中的乘法是不精确的。该产品将不准确。它将略高于 10。
因此,SimpleRoundTo
返回稍高的值,并且由于您已指定舍入应向上,因此 Extended
结果的转换将 SimpleRoundTo
添加到 CurrToStr
的 Currency
输入结果正好是 10.0001。
货币
值是准确的;它们代表一个定点值,一个按小数点后四位缩放的整数。
关于delphi - SetRoundMode(rmUp) 并将 "round"值舍入为 10,结果为何为 10,0001?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/565797/
这段代码: SetRoundMode(rmUp); Memo1.Lines.Add(CurrToStr(SimpleRoundTo(10))); 结果为 10,0001。 我根本不明白。 我认为
我是一名优秀的程序员,十分优秀!