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

最佳答案

您是否考虑过使用floorceil的数学方法?

如果您始终希望舍入为两位数,则可以将要乘以的数字预乘以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

08-20 04:20