Python公开课 - 标准库Decimal详解

详解

Decimal支持对快速四舍五入十进制浮点运算,与float数据类型相比,它提供了以下几个优点:

  • Decimal是以浮点模型为基础的,而浮点模型是为人类而设计的,它必然有一个至高无上的指导原则:计算机必须提供一种与人们在学校学习的算法相同的运算方式。
  • Decimal能够精准表达1.1,3.14这类数值,相比Float类型则不行,例如1.1+2.2会变成3.3000000000000003
  • 精确可以应用到算术中。在十进制浮点数中,0.1 + 0.1 + 0.1 - 0.3恰好等于零。在二进制浮点数中,结果是5.5511151231257827e-017。当接近于零时,差异会影响可靠的相等性测试。
  • Decimal含有有效位的概念,例如1.30 + 1.20的结果是2.50,末尾的0其实是有含义的,这在货币中非常有价值。
  • 与二进制的Float类型精度不同(它和硬件的位数有关),Decimal必须人工选择一个精度,用来更好的表示。
  • Decimal可以进行符号处理及四舍五入。
  • Decimal的设计主要围绕:十进制数字、数学计算及符号。

举例说明

>>> from decimal import *
>>> getcontext().prec = 28
>>> Decimal(10)
Decimal('10')
>>> Decimal(3.14)
Decimal('3.140000000000000124344978758017532527446746826171875')