|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
decimal 模块为快速正确舍入的十进制浮点运算提供了支持。
7 [: v" k' ]9 R# J# E6 G/ h// 它提供float数据类型有以下几个优点:
8 q9 v: m2 O+ O- 十进制数字可以准确表示:数字如 1.1 和 2.2 在二进制浮点中没有精确的表示。( o5 [, L. m0 h2 ~5 X
- >>> 1.1 + 2.26 U/ x3 f1 V6 a
- 3.3000000000000003& D0 P. b6 ?4 B
- >>> from decimal import Decimal
; ?& S& M. z) }$ N; t0 _7 R- x% E - >>> Decimal('1.1') + Decimal('2.2')
- Q9 o6 U' U K6 c; }4 y - Decimal('3.3')
复制代码- 精确性延续到算术中。
- 保留尾随零以表示重要性。1 d/ a/ J5 m% k$ P; ~
- >>> 1.20*1.302 I* N+ ?' j+ z- H
- 1.56
+ E$ _5 \+ n. v3 H5 `, u - >>> Decimal('1.20')*Decimal('1.30')% D0 j, V& p1 w* x; V- [
- Decimal('1.5600')
复制代码 常用方法
" G8 ~5 O& G7 _3 k) e3 q- class decimal.Decimal(value="0", context=None)
复制代码
# ?' x1 O0 m) u U9 q4 ^- 可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。
/ I3 Y. {$ g3 D8 S) |# j: |5 H' s- >>> from decimal import *
# v' o [8 X4 U S* v" H* ?( Y; g! U( C - >>> Decimal(1.1) + Decimal(2.2)) i/ S W+ z6 o5 h
- Decimal('3.300000000000000266453525910'
2 m1 m7 \3 H" ?3 x - >>> Decimal('1.1') + Decimal('2.2')! @" X5 _8 p, S9 r: y! N: g; N
- Decimal('3.3')
复制代码 / ?( a) ^0 h# m% E7 P- J' i! J. f
- 通过设定有效数字,限定结果样式。* Q0 g& ^# Q' w4 A7 s% F
- >>> getcontext().prec = 6
D4 K/ E/ q, M& W% { - >>> Decimal(1)/Decimal(7)) ]" z5 |4 c! k( X+ Z
- Decimal('0.142857')8 A5 c% @7 ]& ?3 I/ Q
- >>> getcontext().prec = 28! w7 L# Y4 N2 h6 q8 v2 u) G0 p
- >>> Decimal(1) / Decimal(7). K$ M6 Q0 ^( O8 l; S4 i
- Decimal('0.1428571428571428571428571429')
复制代码 & U, a! C* N* j# T" N9 m
- 四舍五入,保留几位小数。
4 T( j: X# ?7 J5 u- >>> Decimal('12.3456').quantize(Decimal('0.00'))
7 |( |% [9 Y0 f8 ^: h5 a - Decimal('12.35')7 R8 m0 {9 G$ ?
- >>> Decimal('12.3456').quantize(Decimal('1.1'))8 w9 m0 p& T. C
- Decimal('12.3')
复制代码
# N* F2 a, S8 z
|
|