decimal

float 单精度说明符,double 双精度说明符。在Turbo C中单精度型占4个字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38,只能提供七位有效数字。双精度型占8 个字节(64位)内存空间,其数值范围为1.7E-308~1.7E+308,可提供16位有效数字。

当我们的计算需要使用更高的精度(超过17位小数)的时候

1
2
3
4
5
6
7
8
9
from decimal import *
a = "%.30f" % (1/3)
a
'0.333333333333333314829616256247'
b = Decimal(1)/Decimal(3)
b
Decimal('0.3333333333333333333333333333')
>>> getcontext()
Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, capitals=1, clamp=0, flags=[Inexact, FloatOperation, Rounded], traps=[InvalidOperation, DivisionByZero, Overflow])

默认的context的精度是28位,可以设置为50位甚至更高,都可以。这样在分析复杂的浮点数的时候,可以有更高的自己可以控制的精度
decimal 类型是适合财务和货币计算的128位数据类型

1
2
3
4
5
6
7
8
9
>>> from decimal import Decimal
>>> a = Decimal('2')
>>> b = 3.45
>>> c = Decimal(b)
>>> c
Decimal('3.45000000000000017763568394002504646778106689453125')
>>> d = Decimal(str(b))
>>> d
Decimal('3.45')