|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
decimal 模块为快速正确舍入的十进制浮点运算提供了支持。/ l+ J) A( {' L9 G* }* x8 y [
// 它提供float数据类型有以下几个优点:
+ O( O+ T8 H) A0 n5 Y3 _& p- 十进制数字可以准确表示:数字如 1.1 和 2.2 在二进制浮点中没有精确的表示。9 L9 O3 v. \5 Z9 W5 N+ A; N
- >>> 1.1 + 2.2
0 b- l4 M1 }& ]$ @ - 3.3000000000000003
9 x1 d6 q8 E. {8 ~ - >>> from decimal import Decimal( o3 U" t8 ]% }0 P" O! o) X" U# O
- >>> Decimal('1.1') + Decimal('2.2')
; x3 L6 D9 t- ~$ T* q - Decimal('3.3')
复制代码- 精确性延续到算术中。
- 保留尾随零以表示重要性。
* t! w( J3 n' j, M0 {
- >>> 1.20*1.30
3 S3 A4 T5 }- z. k& p - 1.56# L6 p/ f) Z* p+ G' ^4 v( a& v
- >>> Decimal('1.20')*Decimal('1.30')
H6 i- \+ K, p4 |( [ - Decimal('1.5600')
复制代码 常用方法
" \/ {! ]* ^8 X' X$ e- class decimal.Decimal(value="0", context=None)
复制代码 # R! L% E' l. x( b& }% O
- 可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。
8 j* ^" Q6 C$ o+ N# n- >>> from decimal import ** ?5 l: v) V% ^9 y5 W1 i8 I3 k
- >>> Decimal(1.1) + Decimal(2.2)
4 w6 Z- q5 g; A& J* Q - Decimal('3.300000000000000266453525910'
4 `: k% ]) b4 n5 B7 U5 q - >>> Decimal('1.1') + Decimal('2.2'): S1 `" i6 ~9 T) u2 k) w
- Decimal('3.3')
复制代码
* s' V- _" M0 f: {( ~7 c - 通过设定有效数字,限定结果样式。
7 z: I6 z6 k& J r% v' c- >>> getcontext().prec = 6- c$ t, Z, |" u% ^4 l/ A4 p1 V
- >>> Decimal(1)/Decimal(7)( t V) h* _7 Y3 N
- Decimal('0.142857')
2 p' ~9 ?, a4 X+ `/ g - >>> getcontext().prec = 28
1 N/ Z( o5 ]% W0 U5 s - >>> Decimal(1) / Decimal(7); u _" }7 E- c; j+ n1 C
- Decimal('0.1428571428571428571428571429')
复制代码
* Q# v3 e9 W/ f. I a' O - 四舍五入,保留几位小数。
1 n& h# J \7 [$ D/ t- >>> Decimal('12.3456').quantize(Decimal('0.00')), t* \- }( L7 ]3 j! ~
- Decimal('12.35')5 W: J/ A8 y. K/ k9 Y* u9 [
- >>> Decimal('12.3456').quantize(Decimal('1.1'))7 }& Y" J; E J: m* v+ M1 I9 {
- Decimal('12.3')
复制代码 ! C! G. H/ n! z( J+ \4 B. z
|
|