|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
decimal 模块为快速正确舍入的十进制浮点运算提供了支持。
~/ n0 h) p) z# `// 它提供float数据类型有以下几个优点:
* P& E! Z4 Q4 }/ M+ o+ P1 V- 十进制数字可以准确表示:数字如 1.1 和 2.2 在二进制浮点中没有精确的表示。4 ~1 S9 S, \0 P& L: i+ n
- >>> 1.1 + 2.2
$ M$ ]" ^( M3 q$ M) r - 3.3000000000000003
+ C3 I/ K/ ~ E* K - >>> from decimal import Decimal
! \) d J, l- n$ C# d - >>> Decimal('1.1') + Decimal('2.2'); R* Y0 H! l( U& [' v7 X1 W* Q b
- Decimal('3.3')
复制代码- 精确性延续到算术中。
- 保留尾随零以表示重要性。
0 i! D6 A0 E1 z8 u
- >>> 1.20*1.308 V4 }. c( I8 m
- 1.56. p/ F6 B! M! S7 h- s
- >>> Decimal('1.20')*Decimal('1.30')6 L+ s' [' O5 G) w2 j- c
- Decimal('1.5600')
复制代码 常用方法1 G* s4 L* r* D/ z+ L3 W# ]: W
- class decimal.Decimal(value="0", context=None)
复制代码 6 w7 ^5 y, w% s: Z1 a
- 可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。
- J! {1 U' p3 [# b# `+ |- >>> from decimal import *
' F" _) O" R- f+ K - >>> Decimal(1.1) + Decimal(2.2)& @6 k$ O' K& ?* M
- Decimal('3.300000000000000266453525910'
" V1 S# \. a7 j8 x - >>> Decimal('1.1') + Decimal('2.2')& n; M9 p* y# E+ D
- Decimal('3.3')
复制代码 6 }" a" ~; a* @- Z
- 通过设定有效数字,限定结果样式。
) }" F$ M3 j8 d2 a8 n- >>> getcontext().prec = 6
# I7 ~! q$ \; _# h$ G6 I3 w - >>> Decimal(1)/Decimal(7)
2 n. ?4 j D7 G - Decimal('0.142857')
+ _9 I3 V3 L5 o - >>> getcontext().prec = 28" i5 ]+ z) Z7 h' a' z6 w
- >>> Decimal(1) / Decimal(7)7 C- @2 f2 K* d( M1 E9 p% a+ Z
- Decimal('0.1428571428571428571428571429')
复制代码
5 u# X8 V, w0 {! d. E1 t2 P; i - 四舍五入,保留几位小数。) L( _0 g$ B7 v3 }3 q
- >>> Decimal('12.3456').quantize(Decimal('0.00'))
/ w6 D, s/ E) {7 b& V- } - Decimal('12.35')
; @6 h, a" _; R/ `5 o, E8 x - >>> Decimal('12.3456').quantize(Decimal('1.1'))
3 F7 `' f& a- h4 F/ B+ V3 I. t - Decimal('12.3')
复制代码 1 j5 P4 u F# d' C( o5 @9 n+ I8 J
|
|