|
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
decimal 模块为快速正确舍入的十进制浮点运算提供了支持。
1 b+ y) d2 X7 P# R9 d// 它提供float数据类型有以下几个优点: ) Y# R. e7 e$ D
- 十进制数字可以准确表示:数字如 1.1 和 2.2 在二进制浮点中没有精确的表示。0 U1 K6 P) ~) q' p( s/ o
- >>> 1.1 + 2.2
2 K" ]7 U8 `# H8 D - 3.30000000000000036 E9 ?3 @# e5 [. o
- >>> from decimal import Decimal
5 r; l7 K& Y# i3 U+ F - >>> Decimal('1.1') + Decimal('2.2')% B, ?3 f" e, c8 T
- Decimal('3.3')
复制代码- 精确性延续到算术中。
- 保留尾随零以表示重要性。
2 M5 E* s) R) z. C9 m$ m+ L+ b7 S
- >>> 1.20*1.30* ^. e/ A- R! q9 m) r7 p2 f8 [4 c
- 1.563 E( }4 L! z+ ?! H2 E
- >>> Decimal('1.20')*Decimal('1.30')$ t) f4 q2 c1 E
- Decimal('1.5600')
复制代码 常用方法
& S1 z3 U) K9 w- class decimal.Decimal(value="0", context=None)
复制代码
7 w7 e! K4 E' u& O- 可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。
: y+ x6 c$ s/ o- Z- >>> from decimal import *
. h* _! Q! b* c- p - >>> Decimal(1.1) + Decimal(2.2)
$ p% l! e2 r* M: ] - Decimal('3.300000000000000266453525910'# B- ~0 o8 H4 V" [# J
- >>> Decimal('1.1') + Decimal('2.2')9 y8 F+ S. M& E
- Decimal('3.3')
复制代码
0 S7 f' |8 M; ?( c' O3 n$ j - 通过设定有效数字,限定结果样式。% v. x4 U% S1 _2 k) Z6 F: \0 k
- >>> getcontext().prec = 6
( _5 Z# P. r/ t) R/ k6 ]9 P* u - >>> Decimal(1)/Decimal(7)
0 V; Z" V* g6 | - Decimal('0.142857'); }$ S, \% C7 }; Z9 ]" v
- >>> getcontext().prec = 28
3 \) j: Z6 y$ ^5 Q3 O( Y. @ - >>> Decimal(1) / Decimal(7)
7 h* W9 [$ X* l9 W - Decimal('0.1428571428571428571428571429')
复制代码 : R6 W( P) o5 s
- 四舍五入,保留几位小数。
. j5 q+ e+ [1 s7 M M- >>> Decimal('12.3456').quantize(Decimal('0.00'))
: q! ?' n! s( N; } - Decimal('12.35')
! x" ]9 d# ?! f: y3 c3 y0 q4 R - >>> Decimal('12.3456').quantize(Decimal('1.1')) O+ k! D1 L) j, z( m
- Decimal('12.3')
复制代码
; Y4 j) f. i8 x; H
|
|