|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
decimal 模块为快速正确舍入的十进制浮点运算提供了支持。' S' E$ m0 _1 I. j: h
// 它提供float数据类型有以下几个优点:
" E% _8 w* f, f5 d! f( _" ~, i- 十进制数字可以准确表示:数字如 1.1 和 2.2 在二进制浮点中没有精确的表示。& {, d- [6 K$ [0 c- C
- >>> 1.1 + 2.29 t- z7 J5 w& {; w( C
- 3.3000000000000003
* A, r, Q/ ?1 q8 A$ H - >>> from decimal import Decimal* m- M2 S7 L1 h! V
- >>> Decimal('1.1') + Decimal('2.2')
* O/ x* x/ m; e- c - Decimal('3.3')
复制代码- 精确性延续到算术中。
- 保留尾随零以表示重要性。' U* \/ j6 P* N5 d# q
- >>> 1.20*1.30
# o$ f/ t+ }0 S( W+ }: C( v7 I# F - 1.56
2 f7 I3 X& p+ f8 S: p2 I8 T - >>> Decimal('1.20')*Decimal('1.30')
8 X5 w8 S1 [" r. O& G7 }+ J - Decimal('1.5600')
复制代码 常用方法- t; q6 u3 V6 y- x# p! K7 D
- class decimal.Decimal(value="0", context=None)
复制代码
7 z3 u% b0 [4 `$ E# ?, Z' {3 n- 可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。9 e) D- q, q5 I% o/ F5 D
- >>> from decimal import *
$ f. \8 h. _ J - >>> Decimal(1.1) + Decimal(2.2)
. i$ v7 p$ t- O: g& g1 e8 p8 S - Decimal('3.300000000000000266453525910'
2 F- C: r3 q1 i- E2 K ~( } - >>> Decimal('1.1') + Decimal('2.2'), L1 W6 b* w& r/ I0 x
- Decimal('3.3')
复制代码
3 j4 F7 ?+ l. V; |8 P: a5 S) k/ ` - 通过设定有效数字,限定结果样式。5 Q, D! ^9 ]) j7 Z1 Y5 B( B
- >>> getcontext().prec = 6; q+ L: \# [2 V: B# y+ K
- >>> Decimal(1)/Decimal(7)9 i' L; R2 b* l" l* i! P
- Decimal('0.142857')6 Y0 j( E& C( L# c9 Z+ {" W
- >>> getcontext().prec = 28
/ l- u/ N6 e7 i! W+ `$ q& T - >>> Decimal(1) / Decimal(7)# A9 X D, a7 \! `- E& J% B( S
- Decimal('0.1428571428571428571428571429')
复制代码
6 Q) \. ]1 g# k( U" ?/ W1 m - 四舍五入,保留几位小数。
& R% h1 C2 u4 n, a- >>> Decimal('12.3456').quantize(Decimal('0.00'))8 D4 w# a* k" ^( D* N3 k
- Decimal('12.35')/ Z6 @3 m& A$ \
- >>> Decimal('12.3456').quantize(Decimal('1.1'))6 I5 h+ L# V1 h- y
- Decimal('12.3')
复制代码
% M: G) C' u; p( a3 p+ T
|
|