Python 十进制小数(浮点)与十进制小数(浮点)

Python 十进制小数(浮点)与十进制小数(浮点),python,decimal,Python,Decimal,我是Python编程的新手,最近我一直在学习数据类型的一些方面。正如我读到的,decimal.decimal方法创建了一个decimal对象;decimal.decimal.from_float方法从浮点对象创建一个十进制对象。但是,两者产生相同的输出: >>> import decimal >>> x = 3.14561 >>> y = 3.14561 >>> x = decimal.Decimal.from_float(

我是Python编程的新手,最近我一直在学习数据类型的一些方面。正如我读到的,decimal.decimal方法创建了一个decimal对象;decimal.decimal.from_float方法从浮点对象创建一个十进制对象。但是,两者产生相同的输出:

>>> import decimal
>>> x = 3.14561
>>> y = 3.14561
>>> x = decimal.Decimal.from_float(x)
>>> y = decimal.Decimal(y)
>>> x == y

True
那么,这两者的区别是什么呢

因此,只要您运行的是Python 2.7+,就什么都没有。

per


因此,只要您运行的是Python2.7+,什么都没有。

查看文档,在Python2.7之前,十进制构造函数不能接受浮点参数,这就是为什么您需要from_float类方法

从2.7开始,构造函数也可以直接接受浮点,因此两者是相同的

从文档来看,我认为最初不允许从float构建的原因是:

注:十进制。从0.1开始与十进制“0.1”不同。自从 0.1不能用二进制浮点精确表示,该值存储为最接近的可表示值,即 0x1.9999999999AP-4。十进制的等价值是 0.10000000000000055115123125782702118158340454015625


查看文档,在Python2.7之前,十进制构造函数不能接受float参数,这就是为什么需要from_float类方法

从2.7开始,构造函数也可以直接接受浮点,因此两者是相同的

从文档来看,我认为最初不允许从float构建的原因是:

注:十进制。从0.1开始与十进制“0.1”不同。自从 0.1不能用二进制浮点精确表示,该值存储为最接近的可表示值,即 0x1.9999999999AP-4。十进制的等价值是 0.10000000000000055115123125782702118158340454015625


根据,from_float也被添加到了2.7中,也就是说,在向构造函数添加float支持的同时。+1我同意这就是原因。不是每一个十进制值都可以用浮点表示。@Blair:我想这句话的意思是,在2.7中,构造函数被扩展为也接受浮点,而不是说在2.7中,from_float是新的,如果两个值同时被引入,那么其中一个将是多余的。蓝色框中的注释是关于它被添加到构造函数中。结尾的斜体注释表示2.7中添加了from_float方法。将其与其他方法进行比较,例如fma-斜体注释指的是方法本身。根据,from_float也在2.7中添加,即,在向构造函数添加float支持的同时。+1我同意这就是原因。不是每一个十进制值都可以用浮点表示。@Blair:我想这句话的意思是,在2.7中,构造函数被扩展为也接受浮点,而不是说在2.7中,from_float是新的,如果两个值同时被引入,那么其中一个将是多余的。蓝色框中的注释是关于它被添加到构造函数中。结尾的斜体注释表示2.7中添加了from_float方法。将其与其他方法(如fma)进行比较——斜体注释指的是该方法本身。
Note: From Python 2.7 onwards, a Decimal instance can also be constructed directly from a float.