Вопрос по python – Python странность равенства поплавка
Видеть какое-то неожиданное поведение с Python сегодня вечером. Почему следующая распечатка «не равна»?
<code>num = 1.00 num -= .95 nickel = .05 if nickel != num: print 'not equal' else: print 'equal' </code>
Отличная вещь, ребята. Был вокруг некоторое время и никогда не сталкивался с этим. Благодарю.
3
ответа
десятичный Модуль полезен.
>>> TWOPLACES = Decimal(10) ** -2
>>> Decimal(1).quantize(TWOPLACES)-Decimal(0.95).quantize(TWOPLACES) == Decimal(0.05).quantize(TWOPLACES)
True
Или, альтернативно:
import decimal
decimal.getcontext().prec = 2
decimal.Decimal(1.00) - decimal.Decimal(0.95)
Я сделал вывод из вашего имениnickel
Переменная, что вы думали о деньгах. Очевидно, что с плавающей точкой это неправильный тип для этого.
Error: User Rate Limit Exceeded
>>> Decimal(.05) == Decimal(1.00 - .95) >>> False
Decimal('1') - Decimal('.95') == Decimal('.05')
Error: User Rate Limit ExceededDecimal(str(1.00 - .95)) == Decimal('.05')
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Decimal(0.1)
Error: User Rate Limit ExceededDecimal('0.1')
Что должен знать каждый компьютерщик об арифметике с плавающей точкой.
>>> num = 1..0
>>> num -= 0.95
>>> num
0.050000000000000044
>>> nickel = .05
>>> nickel
0.05
связано с тем, как компьютер хранит числа с плавающей запятой. Я бы предложил датьЧто каждый ученый должен знать об арифметике с плавающей точкой быстрое чтение.
Похожие вопросы
<a href="http://docs.python.org/tutorial/floatingpoint.html" rel="nofollow noreferrer">docs.python.org/tutorial/floatingpoint.html</a>
Отличная вещь, ребята. Был вокруг некоторое время и никогда не сталкивался с этим. Благодарю.