Возможный дубликат:
Ошибка округления Python с числами с плавающей запятой
математика Python неверна
Я не могу заставить Python правильно выполнять вычитание 1–0,8 и присваивать его. Он продолжает выдавать неверный ответ: 0,19999999999999996.
Я немного исследовал:
sq = {}
sub = {}
for i in range(1000):
sq[str(i/1000.)+'**2']=((i/1000.)**2)
sub['1-'+str(i/1000.)]=(1.0-(i/1000.))
и обнаружил, что эта ошибка возникает с несколько случайной группой чисел с плавающей запятой от 0 до 1 до третьего десятичного знака. Аналогичная ошибка также возникает, когда вы возводите в квадрат эти числа с плавающей запятой, но в другое подмножество.
Я надеюсь на объяснение этого и на то, как заставить Python правильно выполнять арифметические действия. Использование round(x,3)
- это обходной путь, который я использую сейчас, но он не элегантен.
Спасибо!
Это сеанс в моей оболочке Python 2.7.3:
*** Python 2.7.3 (default, Apr 10 2012, 23:24:47) [MSC v.1500 64 bit (AMD64)] on win32. ***
*** Remote Python engine is active ***
>>> 1-0.8
0.19999999999999996
>>> print 1-0.8
0.2
>>> a = 1-0.8
>>> a
0.19999999999999996
>>> print a
0.2
>>> a = 0.2
>>> print a
0.2
>>> a
0.2
>>>
Вот код, который я вставил в пару онлайн-переводчиков:
def doit():
d = {'a':1-0.8}
return d
print doit()
и вывод:
{'a': 0.19999999999999996}