我在使用 sprintf
时遇到了舍入问题。我通过了 '%0.0f'
作为格式。 sprintf
舍入不符合预期:0.5
应舍入为 1
,而不是舍入为 0
,这是违反一般舍入规则,而 1.5
、2.5
等已正确舍入:
sprintf('%0.0f', 0.5)
=> "0"
sprintf('%0.0f', 1.5)
=> "2"
为什么会这样,我怎样才能实现预期的行为?
最佳答案
sprintf
执行银行家舍入,将 0.5 舍入到最接近的偶数。这种方法经常被统计学家使用,因为它不会像半数舍入那样人为地夸大平均值。
Float#round
方法(在 Ruby 2.4+ 中)接受一个参数,该参数可以是以下之一:
half: :up
(默认)一半::down
half: :even
(银行四舍五入)
显然您期望 round
的默认值,因此您可以在打印前对您的号码执行 .round
。
关于ruby - sprintf 格式不符合预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48708224/