在Python中统一浮点数

时间:2018-04-23 11:56:17

标签: python python-2.7 floating-point

如何将舍入的浮点数设置为相等的值(以便==返回True),无论对它们应用什么操作(我希望结束舍入结果相同)浮动)。我有以下功能:

def _round(f, n):
  x = f * pow(10, n)
  return truediv(int(x), pow(10, n))

但它仍然没有给我相同的浮动数字。是否有办法使浮点数(无论如何计算)看起来总是严格相同,因为它们在字典中被用作键,任何小的变化都会产生KeyError

2 个答案:

答案 0 :(得分:0)

我认为如果您可以控制浮动的准确性而不会危及您的应用程序,您可以执行以下操作:

round(f, n)

而不是你的代码。只是向你的浮点数的第n位数字。

例如:

a = 2.12423
b = 2.12456
for i in range(1,5):
    print('round(a, {}) == round(b, {}) = {}'.format(i, i, round(a, i) == round(b, i)))
  

round(a,1)== round(b,1)= True
  round(a,2)== round(b,2)= True
  round(a,3)== round(b,3)= False
  round(a,4)== round(b,4)= False

answer也非常重要。

答案 1 :(得分:0)

好的,如果你需要直接十进制截断(即当最后一个小数大于5时没有向上舍入)并使用结果作为字典的键,我建议将整个事物转换为字符串。例如:

def _round(f, n):
   return str(round(f, n+1))[:-1]

for n in range(9):
  print(n, '-->', _round(0.123456789, n))

结果:

0 --> 1.
1 --> 1.2
2 --> 1.23
3 --> 1.234
4 --> 1.2345
5 --> 1.23456
6 --> 1.234567
7 --> 1.2345678

如果您之后需要对值进行一些计算,可以使用float(x)

轻松转换回来
相关问题