|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
decimal 模块为快速正确舍入的十进制浮点运算提供了支持。- Q' d5 t8 s8 q5 s4 ^" z3 b* @ v
// 它提供float数据类型有以下几个优点: " n2 B$ c. t$ h: W6 `6 R$ ?0 J( x
- 十进制数字可以准确表示:数字如 1.1 和 2.2 在二进制浮点中没有精确的表示。4 _( ]/ Q( ]+ B; }$ ^/ j
- >>> 1.1 + 2.25 J8 D& i! n; x7 d+ j
- 3.30000000000000033 e6 h% `! J8 I* H
- >>> from decimal import Decimal0 q! d/ g# X5 i0 ^% c
- >>> Decimal('1.1') + Decimal('2.2')
; ?! \6 ?- R( }9 ^5 _# J - Decimal('3.3')
复制代码- 精确性延续到算术中。
- 保留尾随零以表示重要性。
) @ D* m6 E9 N; t/ x3 s7 g
- >>> 1.20*1.30* ]: v/ P9 B9 N
- 1.56
& A( i7 Q* t$ o9 }/ |( V - >>> Decimal('1.20')*Decimal('1.30')- E+ W: }9 P! c, o
- Decimal('1.5600')
复制代码 常用方法8 m) T+ r M7 l$ m' X0 l
- class decimal.Decimal(value="0", context=None)
复制代码 1 ?3 ?* l" F& T; ?) \4 R- Y5 X
- 可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。
% z7 ^! h4 [! f8 h/ F, D4 k8 {" w/ U- >>> from decimal import *
V& Y) u, q4 g. Q - >>> Decimal(1.1) + Decimal(2.2)
: D5 h: y# m3 a - Decimal('3.300000000000000266453525910'* n* f- t4 F$ k& P; {- u
- >>> Decimal('1.1') + Decimal('2.2')# ]! R* I2 O0 B
- Decimal('3.3')
复制代码
" O7 m, k% A: Z6 s0 Y - 通过设定有效数字,限定结果样式。
% J# F) K1 A' y" P/ f5 O4 c- >>> getcontext().prec = 6/ S9 U k* J% ^( H# e
- >>> Decimal(1)/Decimal(7)
3 a. x% }" S$ ^9 |) |! {. Y, D! H3 J - Decimal('0.142857')
3 q8 f, e7 W6 Q5 C2 X$ t* @ - >>> getcontext().prec = 28
: P0 k* b7 m1 M7 R0 y - >>> Decimal(1) / Decimal(7)$ H" `0 v0 b- D5 X! z5 A6 {1 d
- Decimal('0.1428571428571428571428571429')
复制代码 % B6 ^2 x; C; f/ b4 ~2 U
- 四舍五入,保留几位小数。
8 X/ V1 w9 e# b- >>> Decimal('12.3456').quantize(Decimal('0.00'))
5 ~: p0 ^9 {4 q4 w6 o0 D) l ^3 m - Decimal('12.35')
9 O, ~2 R: \# D1 W& P - >>> Decimal('12.3456').quantize(Decimal('1.1'))% S5 u1 Z, ?$ b7 l. K4 L% w( ^
- Decimal('12.3')
复制代码 - ]* F9 O4 l- m3 y6 o& s
|
|