|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
decimal 模块为快速正确舍入的十进制浮点运算提供了支持。% V& p# G" f! _
// 它提供float数据类型有以下几个优点: 6 Z& M- Q( X, l6 G; S ]4 o% Z
- 十进制数字可以准确表示:数字如 1.1 和 2.2 在二进制浮点中没有精确的表示。
% W5 |# P9 w5 F8 l* ~( @% C
- >>> 1.1 + 2.2
7 d! c( A/ p# u% m2 R9 o' I: {/ k - 3.3000000000000003
" B0 f! y% h' W0 u$ V7 X/ x3 w - >>> from decimal import Decimal: F- X2 {9 s/ A& m
- >>> Decimal('1.1') + Decimal('2.2')
) \/ c1 R5 M h - Decimal('3.3')
复制代码- 精确性延续到算术中。
- 保留尾随零以表示重要性。
' @0 Z* L8 u& N. A3 H, Q4 Q
- >>> 1.20*1.30
0 l+ z4 u+ f3 I, I( q( G4 w - 1.56
3 U7 U' I8 Z* s - >>> Decimal('1.20')*Decimal('1.30'), z& R6 x. [/ {& S& P
- Decimal('1.5600')
复制代码 常用方法0 b5 r, A- P( |
- class decimal.Decimal(value="0", context=None)
复制代码 . X* d7 [' R0 k5 E- ~1 v; m
- 可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。" `0 P4 b0 D, s# }$ w+ W! M
- >>> from decimal import *
2 n7 Z, L1 ]+ ?4 t - >>> Decimal(1.1) + Decimal(2.2)0 M4 }. V$ s+ ^+ s" k' B% I
- Decimal('3.300000000000000266453525910'
Q. y8 ]- B5 K% V - >>> Decimal('1.1') + Decimal('2.2')% L$ e* E) |7 ^6 s( J2 w5 V- b
- Decimal('3.3')
复制代码
+ `1 C* M! A+ U3 ? - 通过设定有效数字,限定结果样式。
5 |1 O! D0 \* m# i: T& d- >>> getcontext().prec = 62 k9 O' u5 c7 |9 m
- >>> Decimal(1)/Decimal(7)* Y# H! h5 J9 y9 g" z3 M4 ]8 l+ B
- Decimal('0.142857')& n9 w: P5 V$ Y: d* T
- >>> getcontext().prec = 28
2 _- C( U& x1 z! r2 ^ - >>> Decimal(1) / Decimal(7)
. ~8 k. [3 B) c+ I! U! m3 @1 X - Decimal('0.1428571428571428571428571429')
复制代码
! k3 L0 ~0 [- F0 b+ k6 g - 四舍五入,保留几位小数。
. ^) p7 s1 M# J- >>> Decimal('12.3456').quantize(Decimal('0.00'))! q% e+ ~. E: I& ^$ G$ W3 L2 Y
- Decimal('12.35'), H2 r, @5 l3 [0 [. I: B4 W
- >>> Decimal('12.3456').quantize(Decimal('1.1'))
5 ?' X! a5 Q$ x. t# N( S/ S - Decimal('12.3')
复制代码
% Q2 H& k8 K4 _4 r8 O$ d9 ?
|
|