|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
decimal 模块为快速正确舍入的十进制浮点运算提供了支持。, y, d- K- z# W! A5 j
// 它提供float数据类型有以下几个优点: % a l$ x g1 M( y7 {
- 十进制数字可以准确表示:数字如 1.1 和 2.2 在二进制浮点中没有精确的表示。- `7 n4 i1 c( X, y; l! X) z! c
- >>> 1.1 + 2.2
5 v+ u2 \$ b- P9 w - 3.3000000000000003
+ T8 y% u- L( p- W) R - >>> from decimal import Decimal
7 M9 Q7 m& f& h2 b' W - >>> Decimal('1.1') + Decimal('2.2')1 a4 i; K9 V6 _7 S
- Decimal('3.3')
复制代码- 精确性延续到算术中。
- 保留尾随零以表示重要性。
3 ]: G: |: r7 I1 M
- >>> 1.20*1.30
7 V& M* j$ O8 g( ^, I - 1.56: D- R; h; k2 W& B! [- j5 t& s
- >>> Decimal('1.20')*Decimal('1.30')4 ~7 U+ |$ A( [- e6 \
- Decimal('1.5600')
复制代码 常用方法
2 G/ m. c7 p! C- class decimal.Decimal(value="0", context=None)
复制代码
9 ^0 E( ^7 R% N+ q; Q1 i- 可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。0 I( I% l: ~3 T2 q
- >>> from decimal import *
" f8 \5 {9 v, V$ a/ l& J - >>> Decimal(1.1) + Decimal(2.2)
7 a( f+ d' A+ K* w& [, f$ m - Decimal('3.300000000000000266453525910'9 N# |! G. N7 _8 o4 W) r6 b& N
- >>> Decimal('1.1') + Decimal('2.2')
- t L1 |; D4 R& l3 B8 L - Decimal('3.3')
复制代码
5 `+ P- o% N j3 C) c - 通过设定有效数字,限定结果样式。
. u% K" {& o$ K4 k0 p- >>> getcontext().prec = 6
+ @$ S! `3 t) K3 G0 k, d - >>> Decimal(1)/Decimal(7): c' R7 c+ h" w$ P! f7 q; p$ p1 Y8 W e
- Decimal('0.142857')
" J: ?& E4 I# w/ \ - >>> getcontext().prec = 28
9 |+ y# g/ Z( l3 d+ }* h - >>> Decimal(1) / Decimal(7)
+ v, ^5 w& i1 r: K. [& o - Decimal('0.1428571428571428571428571429')
复制代码 ' g- L$ w0 z; M# O" O. k" P
- 四舍五入,保留几位小数。; _5 s: w; N3 W
- >>> Decimal('12.3456').quantize(Decimal('0.00'))% ~5 g, Z p1 x. [
- Decimal('12.35')
: Q5 L* X L: Q1 C# j1 M - >>> Decimal('12.3456').quantize(Decimal('1.1'))2 S# _* v6 u5 D# }2 ^% ^
- Decimal('12.3')
复制代码
& ~2 X3 k' R" _8 C ?
|
|