字符串转换为十进制解释



我不明白结果:

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)

实际上,您从一开始就失败了,因为您输入了一个不精确的浮点值。这一个比较操作数没有定义好,这意味着所有后续的意外结果。

最新更新