|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
decimal 模块为快速正确舍入的十进制浮点运算提供了支持。" _0 V8 Q. A6 f% p/ |+ W( u. t6 P
// 它提供float数据类型有以下几个优点:
0 Z# A' X+ G" {7 n6 u5 ]- 十进制数字可以准确表示:数字如 1.1 和 2.2 在二进制浮点中没有精确的表示。& ~" z0 P4 d) E+ l* J) V
- >>> 1.1 + 2.2
' H0 G( r2 x/ v7 l! t# A - 3.3000000000000003
; s& V( k+ Z+ ?" F, C7 \ - >>> from decimal import Decimal4 K0 Q& B% J6 ~$ ?
- >>> Decimal('1.1') + Decimal('2.2')6 ] W. H5 ^, B. y' D" J
- Decimal('3.3')
复制代码- 精确性延续到算术中。
- 保留尾随零以表示重要性。+ [) Z! Z6 A* z2 q, u9 V$ ?2 v3 h
- >>> 1.20*1.306 Q3 ]0 x9 @+ C# l6 b
- 1.56
4 C+ Z) o- i8 w4 s" O" i - >>> Decimal('1.20')*Decimal('1.30')8 T8 ?" N- R5 P% x
- Decimal('1.5600')
复制代码 常用方法
; {8 f+ \! f% H- class decimal.Decimal(value="0", context=None)
复制代码 ! |7 r( v; T- i5 ^- A4 b7 X& [
- 可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。
9 n6 Z) |" {- ^! f- >>> from decimal import *
6 L0 d/ M, R( I, [/ s i! M - >>> Decimal(1.1) + Decimal(2.2)2 Q! c4 H: f" W' o
- Decimal('3.300000000000000266453525910'& @) t5 m% O* c+ Z
- >>> Decimal('1.1') + Decimal('2.2')
/ S/ s+ z5 {0 \2 j- O$ B) U2 ]8 j - Decimal('3.3')
复制代码
# A5 Q# F7 I+ y; k1 [ - 通过设定有效数字,限定结果样式。
3 O8 C: O" Z# B; z6 R6 _- >>> getcontext().prec = 68 k5 ?( U1 z8 O2 k
- >>> Decimal(1)/Decimal(7)
2 {4 J+ D8 u. X1 O/ t( s, S3 u - Decimal('0.142857')+ c5 r$ n# a1 t F
- >>> getcontext().prec = 28) {* H! F+ r. \" f5 l7 e, d
- >>> Decimal(1) / Decimal(7)
. `- N$ u N% ]( k: f% h; ^ ?, N - Decimal('0.1428571428571428571428571429')
复制代码 : K4 m# }' v% d7 U# s
- 四舍五入,保留几位小数。/ ^' r \# O0 D$ v6 b I
- >>> Decimal('12.3456').quantize(Decimal('0.00'))
3 u7 M7 ]6 y( B2 j; [% K. b3 @ - Decimal('12.35')
' `4 u/ H/ B: q3 U. n$ W; E7 f - >>> Decimal('12.3456').quantize(Decimal('1.1'))9 n. k& X) ?# {
- Decimal('12.3')
复制代码 & p, G- g1 V& j8 y, Y% I
|
|