Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python浮点相等奇怪_Python_Floating Point_Equality - Fatal编程技术网

Python浮点相等奇怪

Python浮点相等奇怪,python,floating-point,equality,Python,Floating Point,Equality,今晚看到Python出现了一些意想不到的行为。为什么下面打印出来的“不相等” num = 1.00 num -= .95 nickel = .05 if nickel != num: print 'not equal' else: print 'equal' 您可能会发现该模块很有用 >>> TWOPLACES = Decimal(10) ** -2 >>> Decimal(1).quantize(TWOPLACES)-Decimal(

今晚看到Python出现了一些意想不到的行为。为什么下面打印出来的“不相等”

num = 1.00
num -= .95
nickel = .05

if nickel != num:
    print 'not equal'
else:
    print 'equal' 

您可能会发现该模块很有用

>>> 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)

我从你对镍变量的命名推断出你在考虑钱。显然,浮点是错误的类型。

这是计算机常见的浮点问题。这与计算机存储浮点数的方式有关。我建议快速通读一遍

好东西,伙计们。已经有一段时间了,从来没有遇到过。谢谢。我不同意,这是同样的问题。>>Decimal.05==Decimal1.00-.95>>假十进制'1'-十进制'.95'==Decimal.05'或Decimalstr1.00-.95==Decimal.05'@jb。这是同样的问题,因为您已经将浮点运算的结果转换为十进制。你需要对小数进行运算。您还必须小心地从浮点数中指定小数。注意小数点0.1和小数点0.1之间的差异
import decimal
decimal.getcontext().prec = 2
decimal.Decimal(1.00) - decimal.Decimal(0.95)