四舍五入到小数点后2位
我想用以下输入/输出设计一个函数 f(x:float,up:bool)
:
I would like to design a function f(x : float, up : bool)
with these input/output:
# 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
向上舍入,这不是我想要的.
Now, I know about Python's round
built-in function but it will always round 142.449
up, which is not what I want.
有没有一种方法可以比用epsilons进行大量的浮点比较(容易出错)更好的pythonic方式?
Is there a way to do this in a nicer pythonic way than to do a bunch of float comparisons with epsilons (prone to errors)?
您是否考虑过使用 floor
和 ceil
的数学方法?
Have you considered a mathematical approach using floor
and ceil
?
如果您始终希望舍入为两位数,则可以将要乘以的数字预乘以100,然后将其舍入为最接近的整数,然后再除以100.
If you always want to round to 2 digits, then you could premultiply the number to be rounded by 100, then perform the rounding to the nearest integer and then divide again by 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