|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
decimal 模块为快速正确舍入的十进制浮点运算提供了支持。
3 f+ F- `# n3 N' R: W+ ]// 它提供float数据类型有以下几个优点: 7 ]3 S, v3 x b# c
- 十进制数字可以准确表示:数字如 1.1 和 2.2 在二进制浮点中没有精确的表示。
! ~7 P5 S: i, i: g/ q7 O7 l
- >>> 1.1 + 2.22 z7 d4 @+ \$ I
- 3.3000000000000003/ o4 \- m1 b) T6 X+ I
- >>> from decimal import Decimal( L* V2 i N+ ^/ N# J0 ?# T
- >>> Decimal('1.1') + Decimal('2.2')
7 B/ t* Y7 z6 P8 o! g# U - Decimal('3.3')
复制代码- 精确性延续到算术中。
- 保留尾随零以表示重要性。# T/ g6 Y- A0 O" y5 n- z: b; ]
- >>> 1.20*1.30
9 ~0 w4 Z8 r5 L+ s3 P - 1.56
- M1 z5 ^. `( x - >>> Decimal('1.20')*Decimal('1.30')
2 S v- W9 q9 @* Q, q7 y3 _# d0 a - Decimal('1.5600')
复制代码 常用方法9 m4 G$ O, A$ e
- class decimal.Decimal(value="0", context=None)
复制代码
' W6 X" @2 a1 A( U) F; v1 ~- 可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。
- v' R* e, [5 U6 s4 W4 a- >>> from decimal import *7 {# X! `" E. _. Y
- >>> Decimal(1.1) + Decimal(2.2)
o+ V V5 _3 U9 g0 L: d8 u - Decimal('3.300000000000000266453525910'* ?" v7 Z0 J8 A6 n
- >>> Decimal('1.1') + Decimal('2.2')( j. }' J, x- V$ x1 g
- Decimal('3.3')
复制代码 ( L+ V9 b' d9 X+ Z5 d8 H; a
- 通过设定有效数字,限定结果样式。: |% V0 T( S# s9 K* c5 S
- >>> getcontext().prec = 6
E/ W" _# W$ R: Y - >>> Decimal(1)/Decimal(7)
$ r( g0 p! x/ _" Y& S; d0 s - Decimal('0.142857')
8 u& D L7 k& M. Q$ H [ - >>> getcontext().prec = 28. @# x$ {. ]& w2 s i* `
- >>> Decimal(1) / Decimal(7)
% y" K* p2 P. x3 o6 a - Decimal('0.1428571428571428571428571429')
复制代码
' W2 O: n1 g% C8 O! G/ e - 四舍五入,保留几位小数。
- D; p; N: P- ?: `- z+ j6 ?& R* }3 ?- >>> Decimal('12.3456').quantize(Decimal('0.00'))
: H) c. `8 v! M6 H/ [, U& U - Decimal('12.35')
- }4 `6 s( ^4 u. |9 c7 ~ - >>> Decimal('12.3456').quantize(Decimal('1.1'))- t4 d! Y7 x* @
- Decimal('12.3')
复制代码 6 b! w% i7 S% I+ }: q# |9 w
|
|