我是Python编程的新手,最近我一直在学习数据类型的某些方面。在我读到的时候,方法 decimal.Decimal()会创建一个小数对象; decimal.Decimal.from_float()方法从float对象创建一个十进制对象。但是,两者都产生相同的输出:
>>> import decimal
>>> x = 3.14561
>>> y = 3.14561
>>> x = decimal.Decimal.from_float(x)
>>> y = decimal.Decimal(y)
>>> x == y
True
那么,两者有什么区别?
答案 0 :(得分:3)
查看文档,在Python 2.7之前,Decimal()构造函数不能使用float参数,这就是你需要from_float()类方法的原因
从2.7开始,构造函数也可以直接使用float,因此两者是相同的。
仍然从文档中,我认为最初不允许从浮动构造的原因是:
注意Decimal.from_float(0.1)与Decimal('0.1')不同。以来 0.1在二进制浮点中不能精确表示,该值存储为最接近的可表示值,即 0x1.999999999999ap-4。十进制的等效值是 0.1000000000000000055511151231257827021181583404541015625。
答案 1 :(得分:1)
per the Python3 Docs,
Note: From Python 2.7 onwards, a Decimal instance can also be constructed directly from a float.
只要你运行的是Python 2.7+,就没有了。