Вот мой входОкругление проблема в питона
import numpy as np
array = [0.29, 0.59, 0.12]
na_array = np.array(array)
a = np.sum([0.29, 0.59, 0.12])
print a
if (a == 1.0):
print "success"
выход:
1.0
Почему "успех" не печатается?
Вот мой входОкругление проблема в питона
import numpy as np
array = [0.29, 0.59, 0.12]
na_array = np.array(array)
a = np.sum([0.29, 0.59, 0.12])
print a
if (a == 1.0):
print "success"
выход:
1.0
Почему "успех" не печатается?
Поскольку поплавки не равны. Использование ==
с номерами с плавающей запятой обычно не является хорошей идеей.
What is the best way to compare floats for almost-equality in Python?
Его просто округление при печати, фактическое значение a
является - 0.99999999999999989
(Это из-за внутренние точечные представления плавающих).
Пример -
In [13]: a = np.sum([0.29, 0.59, 0.12])
In [14]: a
Out[14]: 0.99999999999999989
In [15]: print a
1.0
Это происходит потому, что -
In [20]: 0.29 + 0.59
Out[20]: 0.8799999999999999
Если это реальная проблема, вы можете попробовать округлять число перед сравнением -
In [22]: if round(a,1) == 1.0:
....: print('success')
....:
success
Чтение [Арифметика с плавающей точкой: проблемы и ограничения] (https://docs.python.org/2/tutorial/floatingpoint.html) – Kasramvd