|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
decimal 模块为快速正确舍入的十进制浮点运算提供了支持。! s! x4 g: G) u5 b3 e5 r
// 它提供float数据类型有以下几个优点: & ?+ k! C' k! P" e, s
- 十进制数字可以准确表示:数字如 1.1 和 2.2 在二进制浮点中没有精确的表示。
1 ^& ^$ A k. w. V Q) ^: |/ Q
- >>> 1.1 + 2.2
- Q# [/ E# k" T - 3.3000000000000003
! [; _# q" `# X* J$ {' i4 J - >>> from decimal import Decimal& \* g& l) s8 C: q4 d/ `" }# [
- >>> Decimal('1.1') + Decimal('2.2'): k% @. q% `7 O |- J- Q" H
- Decimal('3.3')
复制代码- 精确性延续到算术中。
- 保留尾随零以表示重要性。5 x0 k9 _8 `7 F; k3 M, |! H
- >>> 1.20*1.30
: c/ C( Y- m0 E# c7 C - 1.569 y- e' J5 U- l7 I
- >>> Decimal('1.20')*Decimal('1.30')
1 \4 W$ c$ k( C6 Y) {2 \# q - Decimal('1.5600')
复制代码 常用方法
7 Q* c9 X. y" b7 e0 o0 ~" ]1 h# E- class decimal.Decimal(value="0", context=None)
复制代码 # T! b+ P9 X) }+ A, q% R
- 可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。* a& e& s: Q; r8 B; x0 h3 q# X7 E
- >>> from decimal import *
7 } ~5 `% [; r' `" @; B' | - >>> Decimal(1.1) + Decimal(2.2)# _/ H, J$ @$ ]
- Decimal('3.300000000000000266453525910'' Y# |/ o c; H: k9 b, l" P0 e
- >>> Decimal('1.1') + Decimal('2.2'): R% y1 ^& h, l u7 X5 r7 j4 W
- Decimal('3.3')
复制代码
+ J" g# e0 f y" ~) ^; i - 通过设定有效数字,限定结果样式。
/ I7 r- G% t" }- E! }- >>> getcontext().prec = 6
8 L8 L% J* W/ g7 R - >>> Decimal(1)/Decimal(7)( Y: Y+ ~- ] y
- Decimal('0.142857')
0 o, l6 u, c4 W - >>> getcontext().prec = 28
3 ?( y. m d* ~4 Z ]; z - >>> Decimal(1) / Decimal(7)
2 k4 O Z9 V0 M1 X/ [ - Decimal('0.1428571428571428571428571429')
复制代码 ; E) K; T F/ h9 a7 M/ V) p
- 四舍五入,保留几位小数。4 r, @/ F# k" S/ p0 [. U0 n
- >>> Decimal('12.3456').quantize(Decimal('0.00'))" M2 N: |' R- U4 j e& n& p' A/ l$ b' V9 \
- Decimal('12.35')6 H6 o' }- x8 a9 Z! @6 n! \% D
- >>> Decimal('12.3456').quantize(Decimal('1.1'))
2 }9 J( G' i# \ - Decimal('12.3')
复制代码 8 f# C9 D, \- i) D0 ~# s# C
|
|