|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
decimal 模块为快速正确舍入的十进制浮点运算提供了支持。% f/ {( S) r7 R: C$ k' \( g
// 它提供float数据类型有以下几个优点:
4 d8 N% p# W% }# u5 U- c7 ~- 十进制数字可以准确表示:数字如 1.1 和 2.2 在二进制浮点中没有精确的表示。7 {2 Q& s) Q# A, Y: q% I/ H# a
- >>> 1.1 + 2.2( [! P9 N! f+ O, F+ h/ P% Z& ?
- 3.3000000000000003 D( u: {. ]7 e) l7 S
- >>> from decimal import Decimal
% _( U9 s3 T2 Z7 Y; U' g. f- G - >>> Decimal('1.1') + Decimal('2.2')
, {( F% ^9 E: p% s - Decimal('3.3')
复制代码- 精确性延续到算术中。
- 保留尾随零以表示重要性。2 M6 e1 V, S m) s% a
- >>> 1.20*1.305 b9 w5 k! c9 P
- 1.56
. h. M" {: Y6 u; _ - >>> Decimal('1.20')*Decimal('1.30')
L8 i. A+ D5 D8 ^& Q - Decimal('1.5600')
复制代码 常用方法
" C# U& N) o9 O* s- class decimal.Decimal(value="0", context=None)
复制代码
3 c. m5 I5 {: ]. t- 可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。
1 J/ v& s6 ^# |2 X U- >>> from decimal import *
U" E- l" p. \2 d5 M - >>> Decimal(1.1) + Decimal(2.2)1 G4 O0 {6 s& m L a
- Decimal('3.300000000000000266453525910'
" A$ M- f6 P# U! B) Y( r - >>> Decimal('1.1') + Decimal('2.2')' f7 _: f D3 Z) l
- Decimal('3.3')
复制代码 9 P1 }" w" m$ ?4 W4 U
- 通过设定有效数字,限定结果样式。
6 C+ u' I) Q6 U: |- >>> getcontext().prec = 6
- E* Z+ `! O' o3 j% q* s0 j - >>> Decimal(1)/Decimal(7)
' \$ F( R$ u2 H0 |) G+ | - Decimal('0.142857')
7 W, d# \) q; p+ b4 P3 z. |; L+ p - >>> getcontext().prec = 28" O/ `2 | r) ]1 \+ G3 ^ Q
- >>> Decimal(1) / Decimal(7)4 c/ T5 M, ], x1 P/ L
- Decimal('0.1428571428571428571428571429')
复制代码 & E/ j3 F8 b" x
- 四舍五入,保留几位小数。% l3 i9 `- S) Q- j/ g. I5 T
- >>> Decimal('12.3456').quantize(Decimal('0.00'))+ _" ~ K' i* i# s
- Decimal('12.35')
, ?0 B; `8 f* @* U) H7 ~ - >>> Decimal('12.3456').quantize(Decimal('1.1'))
5 v2 x" I. ?8 u1 m0 |1 b - Decimal('12.3')
复制代码 % k4 ~% Q+ a0 ?9 _
|
|