|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
decimal 模块为快速正确舍入的十进制浮点运算提供了支持。
4 f/ Z+ X9 Z/ ^, j1 Y: u2 s// 它提供float数据类型有以下几个优点:
4 l% z* c2 x; p: t/ X7 `# G& x, i- 十进制数字可以准确表示:数字如 1.1 和 2.2 在二进制浮点中没有精确的表示。
& W, k$ D0 X; R9 p7 v- O( p- F
- >>> 1.1 + 2.23 h% ~& \* `4 d( f, Y( B3 L) q3 `
- 3.3000000000000003
0 r' \+ Y9 o5 f; ` i - >>> from decimal import Decimal8 b6 ^ d$ f% J: P: Y, e& U
- >>> Decimal('1.1') + Decimal('2.2')
. |4 E2 O! l9 j( f - Decimal('3.3')
复制代码- 精确性延续到算术中。
- 保留尾随零以表示重要性。
, N6 v# T. w3 p9 Q: |9 x
- >>> 1.20*1.30+ D! q& P! y% L5 R
- 1.56, z+ H* w* H. ~6 j' p7 h+ e
- >>> Decimal('1.20')*Decimal('1.30')2 N3 m) ?% L, U/ X; n: U0 d
- Decimal('1.5600')
复制代码 常用方法
% L7 H- p* M5 t4 o8 x2 b) p- class decimal.Decimal(value="0", context=None)
复制代码
! v% o; K5 T# U5 V% U- 可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。
! }& A) Z6 J/ y' G$ ~: c) Q. P- >>> from decimal import *, q0 m" ~$ u" Q- W' O
- >>> Decimal(1.1) + Decimal(2.2)
" N: Z2 z7 x& n+ b1 V4 m+ Y - Decimal('3.300000000000000266453525910'
5 X9 \6 T4 L! e @, S5 k ~ - >>> Decimal('1.1') + Decimal('2.2')# Z0 f, E$ W1 d1 P
- Decimal('3.3')
复制代码
3 E! Z/ A$ O* w }* l) V; y - 通过设定有效数字,限定结果样式。
, O Q3 M6 Y: k/ C4 L0 E- >>> getcontext().prec = 68 T* h+ `: t3 Z; J
- >>> Decimal(1)/Decimal(7)/ B8 c4 l1 n6 H+ Z! F
- Decimal('0.142857')8 s$ a. o4 L# W( Y
- >>> getcontext().prec = 28
1 J, U& V5 k P+ M: @0 G - >>> Decimal(1) / Decimal(7)
+ T' r7 l+ U$ R: Z0 }, M - Decimal('0.1428571428571428571428571429')
复制代码
. `7 E) ~% F% [0 W1 j a Q - 四舍五入,保留几位小数。0 N* W- Y3 X! l7 Y* {; z
- >>> Decimal('12.3456').quantize(Decimal('0.00'))4 J$ c" n7 c1 t- M
- Decimal('12.35')
, S3 x! U/ x6 z - >>> Decimal('12.3456').quantize(Decimal('1.1'))3 _$ z) ?. G# E; _9 D& f D
- Decimal('12.3')
复制代码 0 L% a& C7 t4 B# j& E! ^7 ^
|
|