【发布时间】:2021-12-15 14:37:36
【问题描述】:
似乎在使用 RoundTo(数学单位)函数时,它使用银行家的舍入,例如我的 column.point = 76.5 返回 76 而不是 77。我使用 Lazarus 1.8.2 FPC 3.0.4
result:= Double(column.point * scale)//76.5;
SetRoundMode(rmNearest);
result:= RoundTo(result,-decimalen)//76;
如何关闭银行家的四舍五入,以便 76.5 ~= 77 的四舍五入或替代解决方案?如果小数点是 0.5 使用 SetRoundMode(rmup) 代替?谢谢大家
【问题讨论】:
-
所以你总是希望 0.5 向上舍入,但 0.49 向下舍入,对吗?所提供的记录模式都不能保证这一点,因此您必须实现自己的舍入算法,本质上是
Round(X) ::= Trunc(X+0.5) -
是的,我看到 SimpleRoundTo 也可以工作?
-
“四舍五入”可能意味着它四舍五入,例如 3.1 到 4。这可能不是您想要的。这就是为什么您可能需要如上所述定义自己的原因。
-
您使用二进制浮点类型对十进制数据进行运算不是真正的问题吗?
-
杰夫:那不是银行家四舍五入。银行家四舍五入到最接近的偶数。
标签: freepascal lazarus