|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
decimal 模块为快速正确舍入的十进制浮点运算提供了支持。1 }3 m( S5 H9 U. X! l& U2 r
// 它提供float数据类型有以下几个优点:
$ W. w7 q$ }, f- C. V- 十进制数字可以准确表示:数字如 1.1 和 2.2 在二进制浮点中没有精确的表示。
; n" j" p. F9 W; |1 C
- >>> 1.1 + 2.2
* g3 t8 R; R1 T- H* g+ J - 3.3000000000000003# b! p( |) X7 Z
- >>> from decimal import Decimal# K' O0 h+ K( b) g: h1 j( M; K
- >>> Decimal('1.1') + Decimal('2.2')! }# ~( ~5 g) \' g8 X- v
- Decimal('3.3')
复制代码- 精确性延续到算术中。
- 保留尾随零以表示重要性。
; c4 }, P5 G3 t9 O9 |3 \/ v" A, R
- >>> 1.20*1.30
1 r( [" X" z$ p/ y5 h4 \ - 1.56
5 ?; W$ D" |# j) m! a- G" Z - >>> Decimal('1.20')*Decimal('1.30'). k7 { m6 a8 y9 ^. T- m
- Decimal('1.5600')
复制代码 常用方法0 u( y, E- R( w" P4 I. V B' h
- class decimal.Decimal(value="0", context=None)
复制代码
0 G; U. a$ B4 e% c) A- J- 可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。/ P" D" i- S4 _$ @! e
- >>> from decimal import *
5 {( K* ^5 H% j) X: K1 Z% H* p - >>> Decimal(1.1) + Decimal(2.2)
0 X+ |$ \$ R, T' Y% m [ - Decimal('3.300000000000000266453525910'/ i' H ^1 J+ M4 |
- >>> Decimal('1.1') + Decimal('2.2')
+ O% l2 h z3 K% B3 }! n - Decimal('3.3')
复制代码
6 s, t" h( n' O q C8 ? - 通过设定有效数字,限定结果样式。
& D5 F {1 o+ O# o! J$ m- >>> getcontext().prec = 62 W* q/ X1 J6 \: q+ o0 p
- >>> Decimal(1)/Decimal(7)% E/ o, ^1 F- l+ i4 u
- Decimal('0.142857')% q$ a0 W; E" n! H! I1 D. @
- >>> getcontext().prec = 28: _" e$ y# Y# H; ]" g
- >>> Decimal(1) / Decimal(7)7 c$ l T- V. x# y8 L5 N
- Decimal('0.1428571428571428571428571429')
复制代码 / z* G. w# K; I0 l& \) q( [0 S0 ^
- 四舍五入,保留几位小数。 L) G3 a8 { O) m
- >>> Decimal('12.3456').quantize(Decimal('0.00'))2 z( Z, @* b; X; h$ b
- Decimal('12.35')
6 Z, U# g2 p4 N' @+ L - >>> Decimal('12.3456').quantize(Decimal('1.1'))
* |: g" P) B, H F' p - Decimal('12.3')
复制代码
% z8 E9 }3 ~' O/ d% j
|
|