我想用这些输入/输出设计一个函数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