decimal.Decimal(float)与decimal.Decimal.from_float(float)

时间:2014-02-09 19:32:18

标签: python decimal

我是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

那么,两者有什么区别?

2 个答案:

答案 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+,就没有了。