我需要将一个浮点变量四舍五入为2位有效数字,并将结果存储到一个新的变量中(或者和以前一样,这并不重要),但是会发生这样的事情:
>>> a
981.32000000000005
>>> b= round(a,2)
>>> b
981.32000000000005我需要这个结果,但要放到一个不能是字符串的变量中,因为我需要将它作为一个浮点数插入...
>>> print b
981.32实际上,截断也可以,在这种情况下,我不需要极端的精度。
发布于 2014-07-08 22:45:39
你想要做的事情实际上是不可能的。这是因为981.32不能精确地表示为二进制浮点值。closest double precision binary floating point value为:
981.3200000000000500222085975110530853271484375我怀疑这可能会让你感到震惊。如果是这样,那么我建议您阅读What Every Computer Scientist Should Know About Floating-Point Arithmetic。
您可以选择以下方法之一来解决您的问题:
decimal.发布于 2017-06-15 17:26:55
试试这个:
Round = lambda x, n: eval('"%.' + str(int(n)) + 'f" % ' + repr(x))
print Round(0.1, 2)
0.10
print Round(0.1, 4)
0.1000
print Round(981,32000000000005, 2)
981,32只需指出您想要的位数作为第二个kwarg
发布于 2014-07-08 23:05:35
Python打印浮点数的方式和存储浮点数的方式是不同的。例如:
>>> a = 1.0/5.0
>>> a
0.20000000000000001
>>> print a
0.2正如David Heffernan指出的那样,实际上不可能存储许多浮点数的精确表示。如果将浮点数看作一个分数,分母是2的幂(例如1/4,3/8,5/64),就可以这样做。否则,由于二进制的固有限制,它只能凑合使用近似值。
Python认识到了这一点,当您使用print函数时,它将使用上面看到的更好的表示。这可能会让您认为Python准确地存储了浮点数,而实际上并非如此,因为IEEE标准的浮点数表示法不可能做到这一点。但是,计算上的差异非常小,所以对于大多数实际目的来说,这不是一个问题。但是,如果您确实需要这些有效数字,请使用decimal包。
https://stackoverflow.com/questions/24634664
复制相似问题