2.4.2 浮点数类型
Python将带有小数点部分的数字统称为浮点数,如0.0、3.14、-0.0016、20.18、3.5e-3、2.5E+5等。其中,3.5e-3的值为0.0035,2.5E+5的值为250000.0。需要注意的是,浮点数0.0和整数0的数值是相等的,但它们在计算机内部的表示却不相同。
【范例2-13】浮点数类型计算。
1.浮点数运算
大多数编程语言都使用了浮点数这个术语,它指出了这样一个事实:小数点可以出现在数字的任何位置。每种编程语言都必须精心设计,以妥善地处理浮点数,确保不管小数点出现在什么位置,数字的行为都是正常的。
从很大程度上来说,在使用浮点数时无须考虑其行为。只需输入要使用的数字,Python通常会按照期望的方式处理它们。
【范例2-14】浮点数运算。
2.浮点数精度缺陷
同其他软件一样,Python中的浮点数也存在缺乏精确性的问题。这是由于底层CPU和IEEE 754标准通过自己的浮点单位去执行算术运算时的特征导致的。看似有穷的小数,在计算机的二进制表示里却是无穷的,这是实数的无限精度与计算机的有限内存之间的矛盾。所以,浮点类型数值的运算结果包含的小数位数可能是不确定的。
【范例2-15】浮点数精度运算1。
在通常情况下,这一点点小误差是允许的。但是,如果是基数巨大的领域,如金融证券行业,这样的误差就是不能容忍的,此时就要考虑通过一些途径来解决这个问题。
【范例2-16】浮点数精度运算2。
解决这个问题可以采用Python中的Decimal库模块,先将浮点数转换为一个字符串,使调用者能够准确地处理值的位数。
【范例2-17】使用Decimal库模块。
使用字符串来表示数字,尽管代码看起来比较奇怪,但是Decimal库模块支持所有常见的数学运算。Decimal库模块允许控制计算的每个方面,包括数字位数和四舍五入等。