马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
decimal 模块为快速正确舍入的十进制浮点运算提供了支持。
2 Q* J0 u8 y0 T6 s1 b// 它提供float数据类型有以下几个优点: ) t2 d1 i2 g! u
- 十进制数字可以准确表示:数字如 1.1 和 2.2 在二进制浮点中没有精确的表示。
# y# M0 Q2 v/ q% r2 a/ z- W* C; t
- >>> 1.1 + 2.2* A+ Y N9 |; P; {, A! i
- 3.30000000000000034 ^/ U( ~) X# L* X9 @
- >>> from decimal import Decimal9 J, f, k$ B4 E
- >>> Decimal('1.1') + Decimal('2.2')
' N ?* M5 l( Y - Decimal('3.3')
复制代码- 精确性延续到算术中。
- 保留尾随零以表示重要性。2 B& r; K+ F; t7 U7 Z) p. `( \8 {" P
- >>> 1.20*1.30( }8 C. U# [ i( S& _
- 1.56
( I4 S8 x& P' Q* u6 S; E! I0 j, V( f - >>> Decimal('1.20')*Decimal('1.30')
t6 F9 J& t W - Decimal('1.5600')
复制代码 常用方法
! H' o4 Q. G1 e7 M9 Z- d5 F- class decimal.Decimal(value="0", context=None)
复制代码
& \: `; f' H9 K2 c3 j! B- 可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。
! k% v/ \3 A H- >>> from decimal import *
. B# \% a( l# n5 n7 `9 a. w - >>> Decimal(1.1) + Decimal(2.2)
& t2 @& H8 C: P/ x, g% ~ - Decimal('3.300000000000000266453525910'
% }* c0 }; i. M( G+ x J4 f5 H - >>> Decimal('1.1') + Decimal('2.2')
3 b3 s. l$ l% F" \! o - Decimal('3.3')
复制代码
( d. P' N) i9 }, Y [! X - 通过设定有效数字,限定结果样式。
5 M$ ]0 W+ x+ v, o6 `2 `- >>> getcontext().prec = 6& z2 n! M# ~9 \& q: n! ~
- >>> Decimal(1)/Decimal(7) B- S6 B) a% f" X! g7 b
- Decimal('0.142857')
" G4 K% J& [; S8 x* L5 J - >>> getcontext().prec = 28
5 h( m+ Q& y9 Z0 @ - >>> Decimal(1) / Decimal(7)
& {/ C$ S/ C) v4 a3 F* k - Decimal('0.1428571428571428571428571429')
复制代码
. \: [- |% R2 X - 四舍五入,保留几位小数。* e6 ]7 i7 _9 l
- >>> Decimal('12.3456').quantize(Decimal('0.00'))% y9 O+ N' P" W+ ?0 W: B% T* N; w" K
- Decimal('12.35')6 i3 g) S! p6 [2 h, Y5 K4 [
- >>> Decimal('12.3456').quantize(Decimal('1.1'))+ u! ~8 x, r8 |9 l: t
- Decimal('12.3')
复制代码 / _# {3 z0 I* ?" }! V9 F8 p: z
|