|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
decimal 模块为快速正确舍入的十进制浮点运算提供了支持。( F. b0 j8 O7 g2 Z' r
// 它提供float数据类型有以下几个优点: 0 I8 G# v" P; r
- 十进制数字可以准确表示:数字如 1.1 和 2.2 在二进制浮点中没有精确的表示。% y! M# L& }8 I0 q
- >>> 1.1 + 2.2
$ w6 j1 r6 J$ f8 p; \ - 3.3000000000000003& |' w5 ?" o0 ~/ h
- >>> from decimal import Decimal" P) o5 Q+ k3 T( t2 F# ?
- >>> Decimal('1.1') + Decimal('2.2')* n d, L6 C- s
- Decimal('3.3')
复制代码- 精确性延续到算术中。
- 保留尾随零以表示重要性。8 r* } Q$ r% p: D
- >>> 1.20*1.30+ n: Y! T7 S2 @' E
- 1.56& r/ t% f, |! i6 z1 c1 R
- >>> Decimal('1.20')*Decimal('1.30')
( j: U/ u U" E0 _- K( n0 M - Decimal('1.5600')
复制代码 常用方法/ g, H# r4 @! O M0 v4 `
- class decimal.Decimal(value="0", context=None)
复制代码
0 {5 U: p7 T6 z" y- 可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。% g3 _% Y- ~$ M
- >>> from decimal import *
! Q1 v/ n/ f. F# C( o& U - >>> Decimal(1.1) + Decimal(2.2)
, \, @& h( [$ n6 b - Decimal('3.300000000000000266453525910'0 l* [6 ]+ m2 _6 u2 o# l
- >>> Decimal('1.1') + Decimal('2.2')
3 P$ [) ~$ s) @% b - Decimal('3.3')
复制代码 9 D- u" C! Q/ T. h1 u
- 通过设定有效数字,限定结果样式。
/ c" m1 \' Q8 s A3 U- >>> getcontext().prec = 6
?* ~) a/ H( {7 V - >>> Decimal(1)/Decimal(7)
* \, z$ t( o7 D" R/ ?2 F, }+ ` k; l - Decimal('0.142857')
0 a: I# o7 n4 n& w - >>> getcontext().prec = 28
/ [+ m6 m- l/ ?( W ^* c - >>> Decimal(1) / Decimal(7)8 }- K% p8 L0 B6 O
- Decimal('0.1428571428571428571428571429')
复制代码 ! F7 B, @; t$ c& J) M1 E
- 四舍五入,保留几位小数。
. J; w9 h: ^6 \4 f% W ]- >>> Decimal('12.3456').quantize(Decimal('0.00'))
# J4 L' H4 O4 o: Q& } - Decimal('12.35')
! }: S; z5 Q. `. v! U) _ - >>> Decimal('12.3456').quantize(Decimal('1.1')) [7 ]. V0 W9 g, w
- Decimal('12.3')
复制代码
% T/ l8 S- Y5 }! S! n% K
|
|