|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
decimal 模块为快速正确舍入的十进制浮点运算提供了支持。+ J3 p4 w! w) Q# C; D4 [! Y3 H
// 它提供float数据类型有以下几个优点: % [6 c z$ `8 Q
- 十进制数字可以准确表示:数字如 1.1 和 2.2 在二进制浮点中没有精确的表示。
- t5 s! Z* R+ m% |
- >>> 1.1 + 2.2
! a- X9 V$ q2 [% C& K - 3.3000000000000003
1 A1 M m( _+ U - >>> from decimal import Decimal; O, k( ]. a* n( A- T H
- >>> Decimal('1.1') + Decimal('2.2')
5 [2 |! y2 T" T6 } - Decimal('3.3')
复制代码- 精确性延续到算术中。
- 保留尾随零以表示重要性。' P \: U# L8 l) M9 m( y
- >>> 1.20*1.30
V+ T0 B' L/ @7 C& {9 V - 1.56
" H v" g( Y9 {7 o - >>> Decimal('1.20')*Decimal('1.30')2 y5 f c5 M0 Q: x& _! _: B
- Decimal('1.5600')
复制代码 常用方法
* t" ?5 c$ T; W! a- class decimal.Decimal(value="0", context=None)
复制代码
4 I0 ]2 M6 L" w8 J0 ?9 H2 u- 可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。
; H* \3 g5 \5 S& Q& K- >>> from decimal import *
. Q R% {- O- Y - >>> Decimal(1.1) + Decimal(2.2)+ H8 j# H* _/ r' a% B3 Z+ f/ j& O
- Decimal('3.300000000000000266453525910'+ z! r' h5 D6 k$ s6 t" A/ y8 Y
- >>> Decimal('1.1') + Decimal('2.2')" q5 \, n, d. O/ z a+ t- J
- Decimal('3.3')
复制代码 : I/ F& y2 c; p$ K. G
- 通过设定有效数字,限定结果样式。% _6 c" ^" F* d6 [
- >>> getcontext().prec = 6
5 r" R; D5 D6 {3 w - >>> Decimal(1)/Decimal(7)/ o7 r) S6 {, M; O3 w
- Decimal('0.142857')
4 _$ e3 p L+ x$ \$ x) ?( m - >>> getcontext().prec = 28
+ H% N- o. r1 j" [ - >>> Decimal(1) / Decimal(7)
8 u! z5 S* O) ]% A - Decimal('0.1428571428571428571428571429')
复制代码 ) T* M: ]0 n; W; k( z% d
- 四舍五入,保留几位小数。
) m$ d" ] x4 H5 N, q% f' w- >>> Decimal('12.3456').quantize(Decimal('0.00'))
) N$ x0 |* d& n, |) @ - Decimal('12.35')
1 X" k/ {# e: `# G7 x - >>> Decimal('12.3456').quantize(Decimal('1.1')). a( p$ y1 k! U6 t5 _$ j
- Decimal('12.3')
复制代码
( J: s- H8 z& ~: Y' u# i( K( j' C5 h$ w
|
|