我想用这些输入/输出设计一个函数 f(x : float, up : bool):
# 2 decimals part rounded up (up = True)
f(142.452, True) = 142.46
f(142.449, True) = 142.45
# 2 decimals part rounded down (up = False)
f(142.452, False) = 142.45
f(142.449, False) = 142.44
现在,我知道 Python 的 round 内置函数,但它总是将 142.449 向上舍入,这不是我想要的。
有没有比用 epsilons 做一堆 float 比较(容易出错)更好的 pythonic 方式来做到这一点?
请您参考如下方法:
您是否考虑过使用 floor 和 ceil 的数学方法?
如果您总是想四舍五入到两位数,那么您可以将要四舍五入的数字预乘以 100,然后四舍五入到最接近的整数,然后再除以 100。
from math import floor, ceil
def rounder(num, up=True):
digits = 2
mul = 10**digits
if up:
return ceil(num * mul)/mul
else:
return floor(num*mul)/mul
