|
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
decimal 模块为快速正确舍入的十进制浮点运算提供了支持。
. A7 y) o5 T2 p. F- y& H// 它提供float数据类型有以下几个优点:
2 u) Z2 _2 `" |8 z5 D0 D# f( a7 E- 十进制数字可以准确表示:数字如 1.1 和 2.2 在二进制浮点中没有精确的表示。
1 @8 n8 m$ P: M1 T9 \+ I; u# N
- >>> 1.1 + 2.29 I( `! Y% ~* N$ c( ^/ M0 V
- 3.3000000000000003' b) ^" U0 M* I. b0 a2 w, i
- >>> from decimal import Decimal
' ?( ~ j' L9 L7 i' x - >>> Decimal('1.1') + Decimal('2.2'); Q. b, V) X9 \$ ~5 a4 J7 Y
- Decimal('3.3')
复制代码- 精确性延续到算术中。
- 保留尾随零以表示重要性。
+ _! Y6 M- s+ R! I0 B
- >>> 1.20*1.30& d1 l8 _) I v& i$ {
- 1.569 p; F7 c$ s1 l3 \
- >>> Decimal('1.20')*Decimal('1.30')0 ?; q$ ?- P, ?# F* f# P
- Decimal('1.5600')
复制代码 常用方法! c! x- e. Y1 B5 S5 S. m
- class decimal.Decimal(value="0", context=None)
复制代码
* k) l! G" Z' z6 S# G+ n- 可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。
9 y1 P+ u4 T: d! l9 l' m- >>> from decimal import *3 T. [# ~0 }/ d. `, W
- >>> Decimal(1.1) + Decimal(2.2); r% T8 M2 g& F* I# ?* B* c3 L
- Decimal('3.300000000000000266453525910'
1 I/ z# M" i( b: h1 A- O* T* N - >>> Decimal('1.1') + Decimal('2.2')
! r7 |6 n) U8 F7 F# T& L - Decimal('3.3')
复制代码 ; ?5 K6 R$ t5 Z5 y2 h+ R
- 通过设定有效数字,限定结果样式。+ M# U- t! `) M
- >>> getcontext().prec = 6
3 z; G& z& D! R/ ?" F. C+ w! I; g - >>> Decimal(1)/Decimal(7)3 J* J( n$ ]+ C' ~, U/ |# A) `2 H
- Decimal('0.142857')
( a; @# `2 a, \' S h) X0 [ - >>> getcontext().prec = 28+ y2 B* L! S) i4 |6 H
- >>> Decimal(1) / Decimal(7)
6 D) R" r; a6 g) ?8 T - Decimal('0.1428571428571428571428571429')
复制代码
) K( M. ?* f# t! P' P - 四舍五入,保留几位小数。
' w( N5 u0 S7 G# ]1 ^. u5 K. ^4 o- >>> Decimal('12.3456').quantize(Decimal('0.00'))
( ^6 Q! g- J, \/ r# c) n& | - Decimal('12.35')
' ?1 o, Y0 W3 }$ u- `% | - >>> Decimal('12.3456').quantize(Decimal('1.1')); a( h* s" i4 G, B3 _
- Decimal('12.3')
复制代码 0 }/ K& ^ S# q" c
|
|