|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
decimal 模块为快速正确舍入的十进制浮点运算提供了支持。
+ {, }7 i. D2 v// 它提供float数据类型有以下几个优点:
# l$ y0 C7 d* }2 w- 十进制数字可以准确表示:数字如 1.1 和 2.2 在二进制浮点中没有精确的表示。# S, P. \7 G. x) A' P5 z
- >>> 1.1 + 2.2) `2 `9 ~1 Z2 ^* Z( n' y6 ~
- 3.3000000000000003
. ~1 F z" n3 f! S - >>> from decimal import Decimal } R# S: m# W9 K. O
- >>> Decimal('1.1') + Decimal('2.2')
* q" I3 m. S7 d6 h/ D - Decimal('3.3')
复制代码- 精确性延续到算术中。
- 保留尾随零以表示重要性。
6 ]7 ^2 t& \4 S" r( }: e4 T7 _
- >>> 1.20*1.30- j# D4 n. V0 e1 P+ N- p/ s [ y
- 1.56
3 G- s+ d( R8 m - >>> Decimal('1.20')*Decimal('1.30')5 q. d% [/ o+ v3 C- i6 |
- Decimal('1.5600')
复制代码 常用方法
9 |9 H# f) v( F; n: |- class decimal.Decimal(value="0", context=None)
复制代码 Q0 g5 t1 l+ d: g
- 可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。
& u" ]2 q. {% y( }- >>> from decimal import *
) w( \+ y, S2 o9 I& T0 c - >>> Decimal(1.1) + Decimal(2.2)( Q I- w2 `+ {/ w6 u& B7 I
- Decimal('3.300000000000000266453525910'
9 I1 y! s3 P% }% O( j - >>> Decimal('1.1') + Decimal('2.2')1 z1 h- F2 K3 z( c. W% ~
- Decimal('3.3')
复制代码 . @/ |" {! m, b0 k
- 通过设定有效数字,限定结果样式。
2 T3 _" A# Z4 q3 W1 b3 }- >>> getcontext().prec = 6- y9 l# a) H* r; r% ?1 h& ~, r
- >>> Decimal(1)/Decimal(7)
, H( F6 Q8 R1 z$ T - Decimal('0.142857')2 h7 x p* ~- f: A
- >>> getcontext().prec = 28
' f% N4 J! ]( V7 _. E9 i - >>> Decimal(1) / Decimal(7) L; d$ V5 R2 ?& G
- Decimal('0.1428571428571428571428571429')
复制代码
& `3 C6 ~9 j3 m/ y! I/ d2 P! J" x$ k - 四舍五入,保留几位小数。 ?8 ^$ O; t6 n6 [7 U! k2 W
- >>> Decimal('12.3456').quantize(Decimal('0.00'))
7 O+ H2 w) ]+ p2 }7 o; ^. h0 _ - Decimal('12.35')
( N$ g8 [: W! P- \- n) ~7 Z5 Z; | - >>> Decimal('12.3456').quantize(Decimal('1.1'))8 ?7 H9 o& ~2 [( E" G0 w# w
- Decimal('12.3')
复制代码 G6 T. a' l" E1 e* E$ Z
|
|