|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
decimal 模块为快速正确舍入的十进制浮点运算提供了支持。
; {. r! U6 ]: B// 它提供float数据类型有以下几个优点:
+ F ~/ f! a! M! G1 w) J; k- 十进制数字可以准确表示:数字如 1.1 和 2.2 在二进制浮点中没有精确的表示。6 W" `. [% O: P; ~
- >>> 1.1 + 2.2
& H2 }* S c* U8 s2 Y) S. y - 3.30000000000000039 {# W; e. c7 _7 Q/ Z9 y) R
- >>> from decimal import Decimal) i6 o' R- b: C- _
- >>> Decimal('1.1') + Decimal('2.2')
\" K4 s0 L9 P/ U1 F$ r - Decimal('3.3')
复制代码- 精确性延续到算术中。
- 保留尾随零以表示重要性。
) E- N8 W2 P, `
- >>> 1.20*1.30
- `7 r- N) N7 Z9 \& I8 W7 e! S - 1.56
: U, F' v# E( ]4 P" Z - >>> Decimal('1.20')*Decimal('1.30')" v( G8 r$ A3 R/ x
- Decimal('1.5600')
复制代码 常用方法
H* h1 O F: I- class decimal.Decimal(value="0", context=None)
复制代码 " c) Q2 v+ k7 Q" a
- 可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。
8 f; N4 A! F* v, o( m7 o- >>> from decimal import *8 t$ s) H% {. Q" ?" [# ?1 _' n
- >>> Decimal(1.1) + Decimal(2.2)1 z6 b7 P2 z m2 X" R
- Decimal('3.300000000000000266453525910'1 X4 x5 T5 D8 V N0 t
- >>> Decimal('1.1') + Decimal('2.2')+ Z! R1 N) ^# v- x e7 |
- Decimal('3.3')
复制代码
3 D) X: }0 F0 T8 e8 _ - 通过设定有效数字,限定结果样式。
! Z' w4 a, s! ]- >>> getcontext().prec = 6
& S. e5 d, T& x) W - >>> Decimal(1)/Decimal(7)
* F- m* F2 |% k% L/ r- X: A$ y2 O9 A - Decimal('0.142857')* v( j* u: p/ s" _
- >>> getcontext().prec = 28+ {) h4 Y, j1 s. V2 d
- >>> Decimal(1) / Decimal(7)0 M* M! B" }5 |$ {* R; Y6 ^! J
- Decimal('0.1428571428571428571428571429')
复制代码
' i, [3 r3 d# h - 四舍五入,保留几位小数。
( C- {+ i; R( Q% X* m: k! V- >>> Decimal('12.3456').quantize(Decimal('0.00'))
, ]- {2 F2 P* H% M - Decimal('12.35')
! W- f# N) e% H: f* G* O, e: ` r - >>> Decimal('12.3456').quantize(Decimal('1.1'))
* Z" V$ f0 N1 V) @2 S/ J, `- r1 ~ - Decimal('12.3')
复制代码
+ ]4 t* [, z" L$ C( x; V& P
|
|