|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
decimal 模块为快速正确舍入的十进制浮点运算提供了支持。
; h$ r3 @+ V2 @5 o( b8 `2 Y// 它提供float数据类型有以下几个优点: $ l2 Z+ a7 ?/ M% c2 l0 L8 m9 A# H/ C
- 十进制数字可以准确表示:数字如 1.1 和 2.2 在二进制浮点中没有精确的表示。4 D X: m6 j$ R
- >>> 1.1 + 2.2/ x% Y# l- I& K9 c! l
- 3.30000000000000031 i. j! K: q; U$ B) q/ |5 p+ ^
- >>> from decimal import Decimal
+ d R, c) R6 d& v7 y, R) q - >>> Decimal('1.1') + Decimal('2.2')
! U+ r y6 `2 {5 Y( d - Decimal('3.3')
复制代码- 精确性延续到算术中。
- 保留尾随零以表示重要性。2 a8 v- ~5 w& y9 h% C7 Y
- >>> 1.20*1.30
4 k# [: l4 ^) ?5 r6 W% K1 @6 B - 1.56
" P0 T; P. x8 J - >>> Decimal('1.20')*Decimal('1.30')
) ?/ Y' N5 X8 v$ \6 J* F6 ~ - Decimal('1.5600')
复制代码 常用方法
! Q+ E8 J$ C+ O/ [5 l% ^) M- class decimal.Decimal(value="0", context=None)
复制代码
, D# N1 v1 y R# M J5 E- 可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。8 w' b0 t/ S9 v& B" D. R
- >>> from decimal import *$ C: u F# {5 L0 c8 S
- >>> Decimal(1.1) + Decimal(2.2)
$ G5 N# g/ g/ Y7 t7 F& }% B4 G7 h0 ? - Decimal('3.300000000000000266453525910'3 d: P/ [' B. }- T; p! g
- >>> Decimal('1.1') + Decimal('2.2')1 @! N/ q- B4 u8 K1 T
- Decimal('3.3')
复制代码 0 H1 H6 H) J( ~
- 通过设定有效数字,限定结果样式。
' e9 y6 R4 I5 N( ]/ ]9 ]9 Q- >>> getcontext().prec = 6 t. W2 r0 c( K5 W+ m& {
- >>> Decimal(1)/Decimal(7)3 [* Y- P0 V' t7 A
- Decimal('0.142857')
) T2 ^# q6 _1 H( C7 f) v - >>> getcontext().prec = 28
8 _& w9 ~8 L5 b' R5 W - >>> Decimal(1) / Decimal(7)
# i4 G. E5 M2 x {# b - Decimal('0.1428571428571428571428571429')
复制代码 ( ?- H5 F! s2 x0 h
- 四舍五入,保留几位小数。# n1 ~5 U! [( s1 S; S3 E2 J& I- U; G
- >>> Decimal('12.3456').quantize(Decimal('0.00')); Q: \/ k0 X6 ^$ V3 D
- Decimal('12.35')
; Y5 {9 V5 D7 S U3 s - >>> Decimal('12.3456').quantize(Decimal('1.1'))
7 |0 n7 A3 P, [6 n - Decimal('12.3')
复制代码 ; D, I3 u3 C1 e( c
|
|