这也许有点丑陋,但是当您不需要的默认浮点精度(大约11位小数)时,它就可以很好地工作。
该round_to函数使用格式方法从内置的str类的浮动四舍五入到代表浮球随所需的小数位数,然后用一个字符串应用EVAL内置功能圆形浮弦找回浮点数字类型。
该is_close功能只适用于一个简单的条件向围捕浮动。
def round_to(float_num, prec):
return eval("'{:." + str(int(prec)) + "f}'.format(" + str(float_num) + ")")
def is_close(float_a, float_b, prec):
if round_to(float_a, prec) == round_to(float_b, prec):
return True
return False
>>>a = 10.0
10.0
>>>b = 10.0001
10.0001
>>>print is_close(a, b, prec=3)
True
>>>print is_close(a, b, prec=4)
False
更新:
正如@stepehjfox所建议的那样,一种构建rount_to函数以避免“ eval”的更简洁方法是使用嵌套格式:
def round_to(float_num, prec):
return '{:.{precision}f}'.format(float_num, precision=prec)
遵循相同的思想,使用很棒的新f字符串(Python 3.6+),代码甚至可以变得更加简单:
def round_to(float_num, prec):
return f'{float_num:.{prec}f}'
因此,我们甚至可以将其全部封装在一个简单干净的“ is_close”函数中:
def is_close(a, b, prec):
return f'{a:.{prec}f}' == f'{b:.{prec}f}'