我不明白结果:
a1 = Decimal(9999.99)
a2 = Decimal('9999.99')
b = float(9999.99)
a1 > b # false
a2 > b # true <-- ???
a2 > a1 # true <-- ???
在一个web应用程序中,我编写了max_value=9999.99
,用户可以键入值的字段是一个char字段,因此从类似a2
变量的字符串转换而来,并且比较给出了这种意外的比较。你能解释一下吗?
浮点值9999.99
不完全等于9999.99,因为它存储在二进制中,而不是十进制中。十进制值Decimal('9999.99')
是,正好等于9999.99,因为它是从十进制表达式创建的。十进制值Decimal(9999.99)
并不完全等于9999.99,因为它是从浮点值创建的;并且它不完全等于浮点值CCD_ 6,因为它已经被转换为十进制。
decimal
类的目的是在后续计算中保持精度。
在您的示例中
decimal(9999.99)
实际上,您从一开始就失败了,因为您输入了一个不精确的浮点值。这一个比较操作数没有定义好,这意味着所有后续的意外结果。