|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
decimal 模块为快速正确舍入的十进制浮点运算提供了支持。; t1 D% e0 e4 n8 v
// 它提供float数据类型有以下几个优点: ) B' z' z: N# P+ N
- 十进制数字可以准确表示:数字如 1.1 和 2.2 在二进制浮点中没有精确的表示。
1 z. V6 K: |& \5 c/ i0 c6 s
- >>> 1.1 + 2.2
- g2 r0 Q. ^$ ?3 f& C - 3.3000000000000003
7 X$ a, R8 R5 A - >>> from decimal import Decimal
s+ i; u9 L! e: S - >>> Decimal('1.1') + Decimal('2.2'), E2 N0 D+ \$ d/ O2 @9 i
- Decimal('3.3')
复制代码- 精确性延续到算术中。
- 保留尾随零以表示重要性。
+ g' _1 I# U0 r1 ?
- >>> 1.20*1.303 Z# _* t L u& x' Q
- 1.567 M/ J G/ Z# F0 m
- >>> Decimal('1.20')*Decimal('1.30')
& j3 C+ _4 K( b) k; m - Decimal('1.5600')
复制代码 常用方法( \' P/ I( J; h- D$ T! d4 ?2 Q7 c" i4 T
- class decimal.Decimal(value="0", context=None)
复制代码
X [- w( }7 p) B( H- 可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。
' K) C" m' V$ s( [+ ]% A- >>> from decimal import *
. r) l/ g. @$ E2 N* n- \ - >>> Decimal(1.1) + Decimal(2.2)
! f8 @" |# _3 i/ _/ [; R; X. F - Decimal('3.300000000000000266453525910'
2 w; L5 ]% q! F; T, m4 c - >>> Decimal('1.1') + Decimal('2.2')
" @5 Q0 x! [2 A - Decimal('3.3')
复制代码 ' N; J, J' D$ P; k3 Z# w
- 通过设定有效数字,限定结果样式。
; n5 Y/ [& }2 \- >>> getcontext().prec = 6
5 }% a! y+ I# u - >>> Decimal(1)/Decimal(7): D9 _' H6 f1 q2 m% T+ p6 C, H
- Decimal('0.142857') D4 V1 M8 _* w4 L7 y9 [. g3 S8 m3 e$ I
- >>> getcontext().prec = 288 e% R8 |- k4 Y P, h6 v
- >>> Decimal(1) / Decimal(7)- T) ]$ v8 I( j; i
- Decimal('0.1428571428571428571428571429')
复制代码 4 U5 \1 C8 `7 B8 Q
- 四舍五入,保留几位小数。
8 I) e! [: {& a- >>> Decimal('12.3456').quantize(Decimal('0.00'))+ S- J7 ]) u4 v; j# W. W' U. k# g, D# u
- Decimal('12.35')
' y: I, _9 k& K4 o* [9 W - >>> Decimal('12.3456').quantize(Decimal('1.1'))( ~4 d, W1 H2 D- b. ^
- Decimal('12.3')
复制代码
& F |5 Z6 E7 g
|
|