|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
decimal 模块为快速正确舍入的十进制浮点运算提供了支持。) @' M- K: E8 L( k& V2 x- B/ K+ N
// 它提供float数据类型有以下几个优点: 1 n( z7 q& j Z/ h& T% g! L1 H( c
- 十进制数字可以准确表示:数字如 1.1 和 2.2 在二进制浮点中没有精确的表示。
, j7 m$ y- r4 `8 |0 f( _! ]
- >>> 1.1 + 2.2$ R* X& A5 U, k
- 3.3000000000000003
! x5 j- A2 ]# K$ d - >>> from decimal import Decimal
5 ?& r, M7 I4 o3 _ - >>> Decimal('1.1') + Decimal('2.2')( n0 K7 s/ i' C
- Decimal('3.3')
复制代码- 精确性延续到算术中。
- 保留尾随零以表示重要性。- w% P, i, q7 r- U0 f
- >>> 1.20*1.30
2 K2 n% C) U1 v) o) [ @! K7 U - 1.569 ?3 R9 p0 n% @/ ^& a' ~) g; v
- >>> Decimal('1.20')*Decimal('1.30')1 a- y0 Q7 n9 x' {9 J3 o- I, d" Z$ p
- Decimal('1.5600')
复制代码 常用方法3 {$ S4 v: V/ \( H3 t$ t6 H
- class decimal.Decimal(value="0", context=None)
复制代码
: _- Y: N; O" l$ z- 可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。
) |- G4 j& [" w& c& Q- >>> from decimal import *9 A* h5 M# J5 n' q
- >>> Decimal(1.1) + Decimal(2.2)4 H U% C4 {+ V" }3 H
- Decimal('3.300000000000000266453525910'6 }' d, R2 `! Z4 G' g' j
- >>> Decimal('1.1') + Decimal('2.2')
( e7 W+ c4 K3 v5 K/ M9 O+ m; n# _5 ]2 H - Decimal('3.3')
复制代码 7 M* M1 a4 h; P/ K6 [% I$ k
- 通过设定有效数字,限定结果样式。
$ C! T4 o+ a, f( i- >>> getcontext().prec = 63 X( V. O1 j$ O
- >>> Decimal(1)/Decimal(7), N5 u7 X6 H. F8 v) j4 h
- Decimal('0.142857')
! x) D- a: W; W3 }; t! M - >>> getcontext().prec = 282 D f" A+ I) _6 U
- >>> Decimal(1) / Decimal(7)
7 Y# l9 J4 Y q - Decimal('0.1428571428571428571428571429')
复制代码 3 P/ p9 R% S1 y# `5 W
- 四舍五入,保留几位小数。! W# S4 i3 ?; R/ m" R& C2 a. _
- >>> Decimal('12.3456').quantize(Decimal('0.00'))5 D6 Z, N2 b- b A
- Decimal('12.35')
9 K+ ~2 w. x% q& {7 r# ` - >>> Decimal('12.3456').quantize(Decimal('1.1'))
1 c! p2 g& X3 W$ f. Y% ? - Decimal('12.3')
复制代码
# T) |5 {; ?& c
|
|