|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
decimal 模块为快速正确舍入的十进制浮点运算提供了支持。
; {- K0 [4 I/ s, Y// 它提供float数据类型有以下几个优点:
; k9 j- q1 H! ]; H+ u- 十进制数字可以准确表示:数字如 1.1 和 2.2 在二进制浮点中没有精确的表示。% ~# {& }, u. G3 W
- >>> 1.1 + 2.2
! J m. O4 ~& ^+ H! @ Y% C* G - 3.30000000000000036 q4 `2 I9 W/ u3 |) W7 @8 M1 h
- >>> from decimal import Decimal9 ~" b+ e6 O* w$ [% Y
- >>> Decimal('1.1') + Decimal('2.2')# q9 i! @, ^8 S" O9 S* O
- Decimal('3.3')
复制代码- 精确性延续到算术中。
- 保留尾随零以表示重要性。
8 K: N1 c) s: t" x) T
- >>> 1.20*1.30
2 ?: z& \7 M" X& m# }) I* k - 1.56
" y+ r( i0 `- ?; p% n4 w+ _/ H$ { - >>> Decimal('1.20')*Decimal('1.30')9 t: L2 l/ v2 K$ v# B% n
- Decimal('1.5600')
复制代码 常用方法8 R9 t6 o- m3 b; J1 E! `
- class decimal.Decimal(value="0", context=None)
复制代码 + R% i% @/ @8 [4 _
- 可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。
: K7 i7 @* y4 W, @5 b N3 f- >>> from decimal import *
; |9 G: c* q3 }! M9 k - >>> Decimal(1.1) + Decimal(2.2). H1 H" z* |( s) k
- Decimal('3.300000000000000266453525910'
7 M9 w3 R9 F- q' j, }& e, ~ - >>> Decimal('1.1') + Decimal('2.2')& G: h) d/ w; y
- Decimal('3.3')
复制代码
# B+ `" R0 Y3 d1 T, u - 通过设定有效数字,限定结果样式。
- g; y8 V- F- J8 I- >>> getcontext().prec = 6& u) H+ x+ f5 b) K5 y/ I+ ~
- >>> Decimal(1)/Decimal(7)
5 |; t* _. ^2 O$ I2 o+ ^( Q - Decimal('0.142857')
, L/ R) b: Y N m - >>> getcontext().prec = 282 h$ B' C7 H: e8 J1 H+ T* N
- >>> Decimal(1) / Decimal(7)6 F8 Y6 m! B6 t$ r& p6 f
- Decimal('0.1428571428571428571428571429')
复制代码
$ \7 G9 I* L e! d5 ~ - 四舍五入,保留几位小数。
4 J, |' l7 L: }& I$ b! f( O- >>> Decimal('12.3456').quantize(Decimal('0.00'))& C( \& O$ R2 f8 K; W
- Decimal('12.35')7 }% Q) B5 \- W7 H8 i4 F
- >>> Decimal('12.3456').quantize(Decimal('1.1'))
8 }- q% y- u$ H. P+ x - Decimal('12.3')
复制代码
+ E0 t5 a3 a: ]7 m
|
|