|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
decimal 模块为快速正确舍入的十进制浮点运算提供了支持。7 L. G; s; s3 ?$ o
// 它提供float数据类型有以下几个优点:
) H3 t4 B! D) q9 j- M" B- \- 十进制数字可以准确表示:数字如 1.1 和 2.2 在二进制浮点中没有精确的表示。2 E! t* x+ P1 I7 ?8 ?& d
- >>> 1.1 + 2.2
/ |6 ?7 e3 }4 \" c% h( _" v - 3.3000000000000003
* o9 z9 ?" `6 W: N - >>> from decimal import Decimal9 X" Q2 o& L3 o, k
- >>> Decimal('1.1') + Decimal('2.2')) S- p# L( Y4 ^+ [. ^& h
- Decimal('3.3')
复制代码- 精确性延续到算术中。
- 保留尾随零以表示重要性。7 ^9 I* ^; k" d- r' y0 k+ A, R
- >>> 1.20*1.304 e6 V9 ~6 H. G5 s& c7 S
- 1.56% W, Z* t& {7 O2 I" L
- >>> Decimal('1.20')*Decimal('1.30')
. G( L- u0 Z( k1 A3 r! g" g$ l - Decimal('1.5600')
复制代码 常用方法
9 q: c3 X. C1 B/ f3 y- class decimal.Decimal(value="0", context=None)
复制代码 8 |; J1 p- `+ C/ w( S" w2 p
- 可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。
- T) {; R1 O$ U; s- >>> from decimal import *
2 }% o0 E3 X: y E, D7 O( ?& M - >>> Decimal(1.1) + Decimal(2.2)
" ?" ~3 Z1 J3 `6 \, I! s# ` - Decimal('3.300000000000000266453525910'( e: h; u# K4 i. J
- >>> Decimal('1.1') + Decimal('2.2')* c' P: x( O$ U( d3 X$ c6 {
- Decimal('3.3')
复制代码 7 c+ w% y, d" E# a
- 通过设定有效数字,限定结果样式。
8 ~. V$ ^6 e, Q, p- >>> getcontext().prec = 6* v, K% _' t5 o( F
- >>> Decimal(1)/Decimal(7)
0 L# r+ k* B4 q, H- @2 C# N- P - Decimal('0.142857'). b* k/ r6 x, N/ N- D
- >>> getcontext().prec = 28% z/ |6 C; d. ~7 S$ g
- >>> Decimal(1) / Decimal(7)$ r( T* ~$ I# R* n/ h! J
- Decimal('0.1428571428571428571428571429')
复制代码 / E0 D( u- E7 {3 K8 f+ y
- 四舍五入,保留几位小数。
& b; F* P( i! b, R- >>> Decimal('12.3456').quantize(Decimal('0.00'))
+ F, J6 \& t" T5 r& {3 Q - Decimal('12.35')& N6 m+ n, _: n$ N- Z
- >>> Decimal('12.3456').quantize(Decimal('1.1'))7 P4 e+ U* \! m3 A" z
- Decimal('12.3')
复制代码 1 h8 {# w( C1 s8 s6 m0 H
|
|