四舍五入到最接近的 0.05

问题描述 投票:0回答:1

我想将数字四舍五入到小数点后两位,例如:

16.34 -> 16.35
16.36 -> 16.40
16.31 -> 16.35
16.35 -> 16.35 -- NOT ROUND
16.40 -> 16.40 -- NOT ROUND

如果数字以 1-4 结尾,则四舍五入到 5;如果数字以 6-9 结尾,则四舍五入到 0 我如何四舍五入= 谢谢你

python math rounding
1个回答
2
投票

将数字乘以 20(0.05 的倒数),用

math.ceil
向上舍入,然后除以倒数。

例如:

>>> from math import ceil
>>> r = 0.05 ** -1
>>> for n in (i/100 for i in range(10, 20)):
...     m = ceil(n*r) / r
...     print('{:.2f} -> {:.2f}'.format(n, m))
...
0.10 -> 0.10
0.11 -> 0.15
0.12 -> 0.15
0.13 -> 0.15
0.14 -> 0.15
0.15 -> 0.15
0.16 -> 0.20
0.17 -> 0.20
0.18 -> 0.20
0.19 -> 0.20

[归功于Jan Stránský'sThomas Jager's解释该技术的评论]

编辑:重新审视这一点,我认为这相当于a)使用0.05本身而不是其倒数,反转操作,b)使用负楼层除法而不是

ceil

>>> r = 0.05
>>> for n in (i/100 for i in range(10, 20)):
...     m = n // -r * -r
...     print('{:.2f} -> {:.2f}'.format(n, m))
... 

(相同输出)

© www.soinside.com 2019 - 2024. All rights reserved.