为什么 printf 没有按照我在 bash 中期望的方式对数字进行舍入?

为什么 printf 没有按照我在 bash 中期望的方式对数字进行舍入?
prompt> printf "%.2f\n" 3.314
3.31
prompt> printf "%.2f\n" 3.315
3.32

这很好,我得到了我想要的。但是,如果我使用不同的数字,我会得到以下结果:

prompt> printf "%.2f\n" 28.124
28.12
prompt> printf "%.2f\n" 28.125
28.12

为什么在第二种情况下没有正确舍入?应该是这样28.13,不是吗?

答案1

printf使用银行家舍入法(偶数向下舍入,奇数向上舍入):

printf '%.2f\n' 28.125    # 28.12
printf '%.2f\n' 28.135    # 28.14
printf '%.2f\n' 28.145    # 28.14
printf '%.2f\n' 28.155    # 28.16

更多详情请参阅浮点指南

相关内容