【问题标题】:turning off RoundTo uses the Banker's rounding关闭 RoundTo 使用银行家的四舍五入
【发布时间】: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


【解决方案1】:

SimpleRoundTo 函数成功了。 谢谢大家的帮助。

【讨论】:

    猜你喜欢
    • 2023-03-22
    • 1970-01-01
    • 2011-03-07
    • 2010-09-23
    • 1970-01-01
    • 2017-12-26
    相关资源
    最近更新 更多