|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
decimal 模块为快速正确舍入的十进制浮点运算提供了支持。" g9 v0 S7 n9 f3 \) w H4 b
// 它提供float数据类型有以下几个优点: $ k/ C/ m3 Z3 s# k
- 十进制数字可以准确表示:数字如 1.1 和 2.2 在二进制浮点中没有精确的表示。
J7 N& b; y" R0 w4 }, H0 U
- >>> 1.1 + 2.2
( D' M# r6 \+ f% P4 `+ e1 V - 3.3000000000000003
3 [8 u g2 m+ z* |/ K2 T) m - >>> from decimal import Decimal
; y5 l5 }& M0 Y } - >>> Decimal('1.1') + Decimal('2.2')
+ H% z+ F/ U/ z! E1 [ - Decimal('3.3')
复制代码- 精确性延续到算术中。
- 保留尾随零以表示重要性。
7 D [' O7 ?; j0 h) n
- >>> 1.20*1.30" X6 g8 [6 V- A, n3 C
- 1.565 {+ ~/ ]+ J8 W; Y
- >>> Decimal('1.20')*Decimal('1.30')
" {! D' L( h3 f5 Y7 \5 V5 g - Decimal('1.5600')
复制代码 常用方法, z+ i8 c5 ~# S8 |2 _: s& G
- class decimal.Decimal(value="0", context=None)
复制代码 . b' @! l* m# I m* s+ Z4 e6 b9 r0 m
- 可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。1 V) J! o/ t( a' E* N R
- >>> from decimal import *
8 a& b- C7 B, R5 a' S! ] - >>> Decimal(1.1) + Decimal(2.2)
. x2 Q% J3 f! Y \) Q$ r - Decimal('3.300000000000000266453525910'+ {1 Y: U) r/ f' f( g
- >>> Decimal('1.1') + Decimal('2.2')2 h+ o' H# ~( x- r
- Decimal('3.3')
复制代码
: v$ V3 o' S3 A, n( M - 通过设定有效数字,限定结果样式。4 o7 K$ B5 e R/ k1 i) A
- >>> getcontext().prec = 6, u% H2 g1 X( ?0 h4 n
- >>> Decimal(1)/Decimal(7)
x6 o2 c% m" s5 a% j% |: q - Decimal('0.142857')
' J6 d9 D1 K5 L* F9 W& K - >>> getcontext().prec = 28% V' p' C8 v4 _) s% M! K5 ]7 h6 E
- >>> Decimal(1) / Decimal(7)
. y! N, C7 l. O4 R - Decimal('0.1428571428571428571428571429')
复制代码 , E) G0 J$ c( G a7 T! A1 [; T
- 四舍五入,保留几位小数。6 `+ |( o- u8 u: B4 F& Z: x
- >>> Decimal('12.3456').quantize(Decimal('0.00'))
4 e4 |3 o! d/ m" Q - Decimal('12.35')/ o( `+ d: u: f4 ]( A
- >>> Decimal('12.3456').quantize(Decimal('1.1'))
* m7 w2 B8 h B& X1 P6 R$ Y) @ - Decimal('12.3')
复制代码 2 n) Z6 J( J: W/ @, x6 H
|
|