|
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
decimal 模块为快速正确舍入的十进制浮点运算提供了支持。
% X' F( t" X6 V+ C d0 P// 它提供float数据类型有以下几个优点:
! M* @# ^2 V8 o: m, K$ z- X- 十进制数字可以准确表示:数字如 1.1 和 2.2 在二进制浮点中没有精确的表示。
* c$ u( p J4 w1 M5 Q
- >>> 1.1 + 2.29 y+ h H& ]- N3 l2 U* t) I
- 3.3000000000000003
3 j2 y1 I# {. ` - >>> from decimal import Decimal
r" \' J9 B: _6 k0 z$ ^/ j - >>> Decimal('1.1') + Decimal('2.2')
% h. ?6 ~* {. }' {5 L8 x" { - Decimal('3.3')
复制代码- 精确性延续到算术中。
- 保留尾随零以表示重要性。+ P6 O# R# e1 R5 |' Y
- >>> 1.20*1.30# e/ u# c! W+ U0 u, W
- 1.56
0 v% P- r6 n3 ` }, h* Q' p - >>> Decimal('1.20')*Decimal('1.30')
! y' C. P0 y K8 Q8 V9 F7 ? - Decimal('1.5600')
复制代码 常用方法+ k. {/ f2 o. |# r& S# Y4 ]; Z
- class decimal.Decimal(value="0", context=None)
复制代码 7 l9 a1 o, M" u5 X6 f
- 可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。) d1 P' F/ m+ D1 F v% E
- >>> from decimal import *0 Y" z9 d+ o6 v- T$ P' e' a# h
- >>> Decimal(1.1) + Decimal(2.2); @4 W- U& w+ ]
- Decimal('3.300000000000000266453525910'
6 r: J x* F: T, V4 S! \6 { - >>> Decimal('1.1') + Decimal('2.2')
+ o# }5 I7 z; r0 V" q - Decimal('3.3')
复制代码 ( m n" S. ^ U8 E
- 通过设定有效数字,限定结果样式。
- u) x0 r, N- O9 k- >>> getcontext().prec = 63 V; Z& ]# p4 r4 b9 S
- >>> Decimal(1)/Decimal(7)
, ?+ D3 i5 [3 {+ ]6 d: ^ - Decimal('0.142857')
0 J! ^" \* ~( B1 ?, f0 n - >>> getcontext().prec = 28
/ H: W0 {$ `4 v2 D# ?5 J- F# q - >>> Decimal(1) / Decimal(7)+ u' B3 [7 b, g" O! }* F
- Decimal('0.1428571428571428571428571429')
复制代码
7 A2 \( `$ K3 m% V* o; N$ F, { - 四舍五入,保留几位小数。( D ^2 n c. }* N! P
- >>> Decimal('12.3456').quantize(Decimal('0.00'))
% L, g6 W# ]1 d, e - Decimal('12.35')
/ [8 N9 n9 N. n( n - >>> Decimal('12.3456').quantize(Decimal('1.1')), c3 _1 A- W# s& Q8 O
- Decimal('12.3')
复制代码
" r( `3 k6 i8 n
|
|