|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
decimal 模块为快速正确舍入的十进制浮点运算提供了支持。7 s% y' y& w7 b9 f
// 它提供float数据类型有以下几个优点:
+ b4 \$ e% W$ S( ]6 V( ?! ]- 十进制数字可以准确表示:数字如 1.1 和 2.2 在二进制浮点中没有精确的表示。+ J N8 W4 a' {& B* ?# [9 }" W$ Y
- >>> 1.1 + 2.2 b* ~% B& t1 _. J9 }
- 3.3000000000000003& N2 ?- P* v3 w6 S& J% d7 }
- >>> from decimal import Decimal
2 y4 _. {* ^' k8 I+ z - >>> Decimal('1.1') + Decimal('2.2')- B! u, e Q) ^! o
- Decimal('3.3')
复制代码- 精确性延续到算术中。
- 保留尾随零以表示重要性。$ X. q- `7 B4 d+ Q
- >>> 1.20*1.30
2 [8 I6 d6 Q, O! n4 V" t - 1.56
1 [6 e& ?$ W. O: O- m: | - >>> Decimal('1.20')*Decimal('1.30')
: w# f+ C3 C$ P5 V, W/ d3 z - Decimal('1.5600')
复制代码 常用方法- j5 Y4 @3 {$ f" Y" U' t
- class decimal.Decimal(value="0", context=None)
复制代码
% A& @& Z6 c8 J3 q) o& z- 可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。% y* a9 j" H; `+ o, S. f4 t% F
- >>> from decimal import *
$ A% V: F4 j7 m) ~9 C - >>> Decimal(1.1) + Decimal(2.2)
" x5 m4 |( [; Q0 a - Decimal('3.300000000000000266453525910'
. d# C" V0 A1 P6 r: r - >>> Decimal('1.1') + Decimal('2.2')
' O/ D! X2 E( @8 s2 h - Decimal('3.3')
复制代码 , d( x# L, v. g7 e' K0 V
- 通过设定有效数字,限定结果样式。# x5 o) \: r0 s$ T& {5 W
- >>> getcontext().prec = 6
6 x: e, `# ?% m3 c. s - >>> Decimal(1)/Decimal(7) E3 D6 y! }- |/ Q5 V1 S7 q2 O) l
- Decimal('0.142857')6 _( A% v. ~% u/ `$ ~: u& i
- >>> getcontext().prec = 28
; _! v; V; y* a% Y, \ - >>> Decimal(1) / Decimal(7)
" h T3 f& j5 H. i" M h6 _ - Decimal('0.1428571428571428571428571429')
复制代码 ! _3 d7 M4 _' f& z! u3 G) W
- 四舍五入,保留几位小数。
+ v3 K1 E. ^0 b6 U- >>> Decimal('12.3456').quantize(Decimal('0.00')); v. x0 T* l5 C% A! \4 k. N) i
- Decimal('12.35')
v/ A: y8 Y* {* B* g; t, w - >>> Decimal('12.3456').quantize(Decimal('1.1'))
- L2 |$ p1 f. j9 w3 F - Decimal('12.3')
复制代码
+ E/ f% Z& x7 t# k7 j
|
|