|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
decimal 模块为快速正确舍入的十进制浮点运算提供了支持。
1 z u& B2 Z6 a; @, Q// 它提供float数据类型有以下几个优点:
8 t+ w4 c- P; [1 e( \- 十进制数字可以准确表示:数字如 1.1 和 2.2 在二进制浮点中没有精确的表示。2 i3 L: b. U. o% ?) f
- >>> 1.1 + 2.22 A& G6 F# O1 b$ c3 r
- 3.3000000000000003
, O7 z% P0 C+ L' [* b/ W - >>> from decimal import Decimal( `- Y4 `7 g" x4 z, J
- >>> Decimal('1.1') + Decimal('2.2')$ f8 ?6 \1 ~- M
- Decimal('3.3')
复制代码- 精确性延续到算术中。
- 保留尾随零以表示重要性。, t, T1 w5 u& S4 g2 L, a
- >>> 1.20*1.30
0 v5 f' U& _' l% H' ?5 \ - 1.56/ I/ W9 u6 ~1 ~' z: A
- >>> Decimal('1.20')*Decimal('1.30')& @: L" K: x5 g5 j7 Z2 U" D# q
- Decimal('1.5600')
复制代码 常用方法
3 r1 w5 g0 |" o% K- class decimal.Decimal(value="0", context=None)
复制代码 8 u6 K) ]8 B! O) W
- 可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。
0 R) A* [& E6 k/ `, E/ y% y- >>> from decimal import *
/ s* ?4 p* @! }5 h5 }0 ~ - >>> Decimal(1.1) + Decimal(2.2)
7 W' T+ p: P: W- e1 f$ g3 I9 c - Decimal('3.300000000000000266453525910'% E0 _- U5 }+ I, g1 V
- >>> Decimal('1.1') + Decimal('2.2')
# T# |# H) |3 n) E8 {* n - Decimal('3.3')
复制代码 9 W% D+ |' j" |; F6 z, j2 E
- 通过设定有效数字,限定结果样式。
2 l, p3 b! @' d( s- >>> getcontext().prec = 6$ Z+ U$ ~. q0 `& t0 X
- >>> Decimal(1)/Decimal(7)
) l4 h- W1 u& i6 V( g9 J* a - Decimal('0.142857')2 H5 w5 t+ {1 X+ f4 c% j- k
- >>> getcontext().prec = 28
~8 ?# \! g8 ] - >>> Decimal(1) / Decimal(7)
, T! W; |2 P& R1 h - Decimal('0.1428571428571428571428571429')
复制代码
' e8 d" a1 U' i- @/ D - 四舍五入,保留几位小数。
" T" L1 A, Q3 l2 w- >>> Decimal('12.3456').quantize(Decimal('0.00'))
1 \& k6 X+ b. M8 [5 b& ] - Decimal('12.35')
4 t; r8 g) s! ` - >>> Decimal('12.3456').quantize(Decimal('1.1'))
1 P! _5 n, ~# N( P - Decimal('12.3')
复制代码
% l& z& [- ]; \' W S1 Z: W
|
|