|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
decimal 模块为快速正确舍入的十进制浮点运算提供了支持。
: v6 Q' |7 B- w// 它提供float数据类型有以下几个优点: + ]* b: N0 r* h4 I
- 十进制数字可以准确表示:数字如 1.1 和 2.2 在二进制浮点中没有精确的表示。
- \6 `0 E( J/ g! k. s+ H) }
- >>> 1.1 + 2.2 q( }: l; Y+ R- C
- 3.3000000000000003
3 \9 G0 Y/ X) J7 @# u* U4 S - >>> from decimal import Decimal/ U) v% X- q& ~3 x
- >>> Decimal('1.1') + Decimal('2.2')) p3 [' m7 S6 X
- Decimal('3.3')
复制代码- 精确性延续到算术中。
- 保留尾随零以表示重要性。8 E6 f" q. {1 L2 i' q
- >>> 1.20*1.30
. C) }) J; p+ y0 T& U+ {3 W - 1.56
+ O/ _, i% g4 k. U1 |6 w# Z - >>> Decimal('1.20')*Decimal('1.30')
+ ]8 S7 D# a* D! \ - Decimal('1.5600')
复制代码 常用方法
. N; ^ ^5 Y9 L* q% K+ H- class decimal.Decimal(value="0", context=None)
复制代码
1 d- B* g" C& A& I' z9 u- 可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。# W5 a2 K* G1 V; V( F
- >>> from decimal import *
( ~ o+ l$ ]/ I- N. f - >>> Decimal(1.1) + Decimal(2.2)- d; D b2 K4 y5 h# L
- Decimal('3.300000000000000266453525910'
) H, y- X8 x/ o) n - >>> Decimal('1.1') + Decimal('2.2')
a) R3 n" u$ C- G" Q* j3 b - Decimal('3.3')
复制代码 9 q% u0 P+ p1 u3 i( ]( f
- 通过设定有效数字,限定结果样式。
9 N5 C6 z& W( Q) i7 j! e8 Q- >>> getcontext().prec = 6
7 k. u3 k B c2 }7 Q! P% j - >>> Decimal(1)/Decimal(7)- w' v5 w1 d( |# V# G
- Decimal('0.142857'), b- f4 f5 b7 {- C2 t
- >>> getcontext().prec = 28- E" Q; R; Q. q
- >>> Decimal(1) / Decimal(7)8 Q7 z3 p! l6 |$ ^0 M& O! y
- Decimal('0.1428571428571428571428571429')
复制代码 ! j: ~ m! u" U& R8 |; R6 M2 k4 s
- 四舍五入,保留几位小数。) V; z5 C. f1 C6 z- M
- >>> Decimal('12.3456').quantize(Decimal('0.00'))" B+ H, E+ z$ m( l3 s
- Decimal('12.35')( L. S. r! F& W3 y& w8 [
- >>> Decimal('12.3456').quantize(Decimal('1.1'))3 \6 x' d' `- o
- Decimal('12.3')
复制代码 8 |% J1 w c& [' M) t; S
|
|