|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
decimal 模块为快速正确舍入的十进制浮点运算提供了支持。; U# {. w, c- D* I4 n2 q
// 它提供float数据类型有以下几个优点: ; N) k0 E7 P# s$ P+ H
- 十进制数字可以准确表示:数字如 1.1 和 2.2 在二进制浮点中没有精确的表示。
6 E1 V# I4 `# E& w* a6 I+ m
- >>> 1.1 + 2.23 P; n) K t% I; C# I
- 3.3000000000000003
5 k5 J$ a0 j4 K3 g( t! u - >>> from decimal import Decimal
; Q& {) V' u j3 p - >>> Decimal('1.1') + Decimal('2.2')
% g* |2 A8 |! a) { - Decimal('3.3')
复制代码- 精确性延续到算术中。
- 保留尾随零以表示重要性。
B; y3 r0 Y* I: X5 m1 I
- >>> 1.20*1.30% e/ U8 D" m. P# G: Q9 m
- 1.56- ~$ L$ ?& [0 H0 @! `; Q5 O
- >>> Decimal('1.20')*Decimal('1.30')$ P7 U- H# B: S0 b/ O9 ~
- Decimal('1.5600')
复制代码 常用方法' o; [3 ^( X" n; |1 ~/ Q+ F
- class decimal.Decimal(value="0", context=None)
复制代码
0 M, U0 l$ Z. { w/ s7 s5 \- 可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。
: E5 R9 I9 \& h) H- >>> from decimal import *
2 {6 {" u. d* `/ s. Q - >>> Decimal(1.1) + Decimal(2.2)5 E1 N9 g1 G" \7 B3 @
- Decimal('3.300000000000000266453525910'9 {5 [/ q$ Q$ `) t+ ]0 \& w
- >>> Decimal('1.1') + Decimal('2.2')
0 X. w O' ]% P3 x! a* z! @ - Decimal('3.3')
复制代码 J n' n# X3 I9 x( L- X3 c0 @
- 通过设定有效数字,限定结果样式。- ^" Q" y8 A, _
- >>> getcontext().prec = 6
" v' I1 V3 C; ^/ ?/ J - >>> Decimal(1)/Decimal(7)& v' R6 u" } s- K
- Decimal('0.142857')
Z* w0 T0 Q( C+ _7 E8 u4 X0 e2 K - >>> getcontext().prec = 28. y* \) Q O& U- J& U* e
- >>> Decimal(1) / Decimal(7)3 k- v% `' {, x5 m6 Y) w
- Decimal('0.1428571428571428571428571429')
复制代码
; z1 N' u- X1 E1 {) [4 x - 四舍五入,保留几位小数。. E3 Z ]( O8 h) q1 y- x
- >>> Decimal('12.3456').quantize(Decimal('0.00'))8 ?; ` \- _3 ?) z( D4 ?4 k; N* Y
- Decimal('12.35')
4 }# C- J: g9 d, G+ [7 m - >>> Decimal('12.3456').quantize(Decimal('1.1'))% |" m5 {6 O" T
- Decimal('12.3')
复制代码 ; g' u9 R- X0 e! G
|
|