|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
decimal 模块为快速正确舍入的十进制浮点运算提供了支持。
; l c( z# J) ^& N0 B* \// 它提供float数据类型有以下几个优点: " O8 v) [1 Y9 A
- 十进制数字可以准确表示:数字如 1.1 和 2.2 在二进制浮点中没有精确的表示。( U# C- v7 ~4 f" h7 x, F5 N R: h
- >>> 1.1 + 2.28 l7 u1 a( q. |* ^% [- F
- 3.3000000000000003
! U2 x7 _8 I# _1 W - >>> from decimal import Decimal+ \0 I; _6 f: C5 K' |9 z" o
- >>> Decimal('1.1') + Decimal('2.2')# a7 ]3 M0 W+ R1 V# Q; ]
- Decimal('3.3')
复制代码- 精确性延续到算术中。
- 保留尾随零以表示重要性。4 s l3 Z( Q' U0 h+ G
- >>> 1.20*1.30/ ?6 h8 b' s* o
- 1.56) Q, D3 U% c1 I
- >>> Decimal('1.20')*Decimal('1.30')
, M) p" J; P- \& h% q# }0 J: h( s - Decimal('1.5600')
复制代码 常用方法8 t2 c- M; Z3 U- z; y
- class decimal.Decimal(value="0", context=None)
复制代码 # `4 P0 @* e/ y' f# {
- 可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。
/ ?( t8 O& @8 d+ b- >>> from decimal import *. X& o, A( l' @' T0 x" f1 S
- >>> Decimal(1.1) + Decimal(2.2)
9 _9 x$ A+ f" y, v9 C - Decimal('3.300000000000000266453525910'
1 z) h8 ^+ a% E - >>> Decimal('1.1') + Decimal('2.2')
8 G( r$ t% }8 v3 i W - Decimal('3.3')
复制代码
4 V5 X' T* Q" M, t, } - 通过设定有效数字,限定结果样式。
! ]" u$ m2 ^. V2 l ^- >>> getcontext().prec = 69 m( N1 I5 z; N, ~
- >>> Decimal(1)/Decimal(7)
: q: c) q7 y) u" I5 E. }% f0 N - Decimal('0.142857')
i2 v2 e: f! @+ b - >>> getcontext().prec = 28
. n2 V4 v7 [6 a r! z4 a- }& G9 i1 \ - >>> Decimal(1) / Decimal(7): ^0 q8 f3 c8 t
- Decimal('0.1428571428571428571428571429')
复制代码 7 |3 H/ T0 L/ g: J. x
- 四舍五入,保留几位小数。
* T4 s. m/ _: X; x6 X7 z- >>> Decimal('12.3456').quantize(Decimal('0.00'))
8 K8 c& [6 j1 N9 h3 p$ W* N8 M. U - Decimal('12.35')! ~9 {8 u7 @' N7 H
- >>> Decimal('12.3456').quantize(Decimal('1.1'))
: u# @' b( K# ]. m* \5 r0 A$ \7 X! M - Decimal('12.3')
复制代码 % R, W8 X( \2 h! f0 w* p- l
|
|