Вопрос по python – Python странность равенства поплавка

0

Видеть какое-то неожиданное поведение с Python сегодня вечером. Почему следующая распечатка «не равна»?

<code>num = 1.00
num -= .95
nickel = .05

if nickel != num:
    print 'not equal'
else:
    print 'equal' 
</code>
Отличная вещь, ребята. Был вокруг некоторое время и никогда не сталкивался с этим. Благодарю. Benjamin Powers

Ваш Ответ

3   ответа
2

десятичный Модуль полезен.

>>> 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 ExceededDecimal(0.1)Error: User Rate Limit ExceededDecimal('0.1')
6

Что должен знать каждый компьютерщик об арифметике с плавающей точкой.

>>> num = 1..0
>>> num -= 0.95
>>> num
0.050000000000000044
>>> nickel = .05
>>> nickel
0.05
0

связано с тем, как компьютер хранит числа с плавающей запятой. Я бы предложил датьЧто каждый ученый должен знать об арифметике с плавающей точкой быстрое чтение.

Похожие вопросы