|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
decimal 模块为快速正确舍入的十进制浮点运算提供了支持。
0 |5 t6 H6 b1 s1 H// 它提供float数据类型有以下几个优点: 4 g* F7 b- m- v
- 十进制数字可以准确表示:数字如 1.1 和 2.2 在二进制浮点中没有精确的表示。
' u+ l& ^; f' ^ h& E
- >>> 1.1 + 2.2/ `: v" c) \$ ]3 D2 J6 D: y
- 3.3000000000000003
- j4 }' l3 v# G4 N. _, D% Z, L! } - >>> from decimal import Decimal
' T9 ], h m5 ~+ X% Y - >>> Decimal('1.1') + Decimal('2.2')2 n8 L5 P; g+ d7 {9 i. e, T1 {
- Decimal('3.3')
复制代码- 精确性延续到算术中。
- 保留尾随零以表示重要性。
% `3 E3 P! i; y# y% H
- >>> 1.20*1.305 i6 H4 b, n- Y; m: s0 }
- 1.564 G0 E/ p# \+ m3 K0 R( p# Z, r" o
- >>> Decimal('1.20')*Decimal('1.30')% G \2 ?2 D* d" ?. ] ^+ Z
- Decimal('1.5600')
复制代码 常用方法3 ?0 k6 v! q( j, I
- class decimal.Decimal(value="0", context=None)
复制代码 7 I( H/ D2 E3 v! N( q
- 可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。
7 I, n8 f& t8 X8 C; ^% F% O- >>> from decimal import *
4 J; U9 o/ c' p2 C - >>> Decimal(1.1) + Decimal(2.2)
, R( s# o6 |, e9 a2 [9 Y- L - Decimal('3.300000000000000266453525910'/ h& O: s* m/ J7 u1 U6 b
- >>> Decimal('1.1') + Decimal('2.2')
y6 ~- N( o$ S3 K" u8 ?* B - Decimal('3.3')
复制代码
6 M3 o1 D9 j7 g% I) q - 通过设定有效数字,限定结果样式。6 t" Y- e4 v0 u! T" W4 }& l
- >>> getcontext().prec = 6
% a% Y8 v6 R* w' w - >>> Decimal(1)/Decimal(7)9 ]4 J; @+ x7 }+ t$ K6 t
- Decimal('0.142857')' o p* p& t8 J/ N9 }
- >>> getcontext().prec = 286 i8 W6 G* Q3 ^" @
- >>> Decimal(1) / Decimal(7)
, ]8 x- t* g- x3 W; k4 Y/ ~5 E4 K a - Decimal('0.1428571428571428571428571429')
复制代码 / a' W+ m# }: W/ h q2 [
- 四舍五入,保留几位小数。
8 |9 _6 X2 z% n8 y4 ^- >>> Decimal('12.3456').quantize(Decimal('0.00'))% o3 `, g8 d$ [# R2 R
- Decimal('12.35')
& ~6 d; |3 ?, g9 [ - >>> Decimal('12.3456').quantize(Decimal('1.1'))" f; i! T5 }: o# e4 M# o
- Decimal('12.3')
复制代码 ) |$ O' b I7 c
|
|