|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
decimal 模块为快速正确舍入的十进制浮点运算提供了支持。
: ]5 g7 W+ u/ {# M+ _8 _// 它提供float数据类型有以下几个优点: ; }# w3 g d7 P" Y# b( U* `- ?$ K
- 十进制数字可以准确表示:数字如 1.1 和 2.2 在二进制浮点中没有精确的表示。2 P& H5 g: u3 K( z
- >>> 1.1 + 2.20 x) C7 N& G; I. @
- 3.30000000000000030 r+ \6 A2 q( y3 Z# q
- >>> from decimal import Decimal
) a& O8 Z n: B+ d; l% r( G - >>> Decimal('1.1') + Decimal('2.2')# `# k+ H+ \/ Y# L& ^
- Decimal('3.3')
复制代码- 精确性延续到算术中。
- 保留尾随零以表示重要性。2 w9 ]0 q7 h3 I I
- >>> 1.20*1.30 R# r( i3 V. y/ }( [4 U' w
- 1.56' G, V( Z6 S W# a- o+ v
- >>> Decimal('1.20')*Decimal('1.30')
/ X: H7 s* f* g+ P - Decimal('1.5600')
复制代码 常用方法0 G" c, P- ] r) u
- class decimal.Decimal(value="0", context=None)
复制代码
3 ~- M) D J5 \+ M* @- 可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。
1 v1 { E: E/ d2 k9 L- >>> from decimal import *
3 z/ Y) a; X! k7 Y+ b - >>> Decimal(1.1) + Decimal(2.2). S# n$ r. a3 z' G
- Decimal('3.300000000000000266453525910'$ }6 C5 ]/ {0 q
- >>> Decimal('1.1') + Decimal('2.2')+ \( _, x5 p3 C
- Decimal('3.3')
复制代码 # Q% t5 u5 {8 o# ?9 b p8 j1 ]8 ?, {& T- V
- 通过设定有效数字,限定结果样式。
, X# m2 ]8 R' p |$ \- >>> getcontext().prec = 6
! L# E: y: w4 k" ?, Z7 n1 R - >>> Decimal(1)/Decimal(7)/ L# I6 Y- u$ w7 t. {
- Decimal('0.142857')
" ^% ?! j# Z; u, z0 [: u& Y4 J, J) e0 a - >>> getcontext().prec = 28/ @" {3 p. A2 z1 m" y. `2 x
- >>> Decimal(1) / Decimal(7)
6 T. |2 F' V; S% T$ {$ f: }" z - Decimal('0.1428571428571428571428571429')
复制代码 # j6 v8 d2 @- ~$ Z
- 四舍五入,保留几位小数。
$ ^. |. j2 `8 v- >>> Decimal('12.3456').quantize(Decimal('0.00'))- G0 M: K/ ]2 {4 s ?
- Decimal('12.35')# ^7 V8 U9 n% s9 K4 T
- >>> Decimal('12.3456').quantize(Decimal('1.1'))& Q; R( q4 _1 \
- Decimal('12.3')
复制代码 & r: X1 u6 E& W9 ?6 M2 E6 T+ \
|
|