|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
decimal 模块为快速正确舍入的十进制浮点运算提供了支持。
' Q( I1 {' ?3 k: E8 U( D+ x8 }// 它提供float数据类型有以下几个优点: 5 b4 e' }* t& z( o
- 十进制数字可以准确表示:数字如 1.1 和 2.2 在二进制浮点中没有精确的表示。 X7 X8 C& t7 f2 ?, y; h/ `
- >>> 1.1 + 2.2: w7 u' T F# O7 @, @ ~
- 3.3000000000000003' o- l" ^" ~3 \: ~* ~% {. W
- >>> from decimal import Decimal! y2 X* j$ s9 x. b9 _
- >>> Decimal('1.1') + Decimal('2.2')
& p) T: F% p" e2 k" U - Decimal('3.3')
复制代码- 精确性延续到算术中。
- 保留尾随零以表示重要性。9 o' c% Z4 D& J5 n! G
- >>> 1.20*1.30
; }: r$ _: v4 H* Y7 ]& H6 k - 1.56
3 r0 ]* ?4 U2 C( \ - >>> Decimal('1.20')*Decimal('1.30')
`5 e" I5 b5 _# L) a, A - Decimal('1.5600')
复制代码 常用方法$ y2 b% ?9 C8 L
- class decimal.Decimal(value="0", context=None)
复制代码
0 p/ G* _, T+ Z0 |; ]$ l7 |3 z* c- 可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。
3 o' `* F" G3 v4 D8 [& g- >>> from decimal import *
% O6 A1 H! x! D0 x7 e - >>> Decimal(1.1) + Decimal(2.2)
& W" m2 _# j# D) T - Decimal('3.300000000000000266453525910'
. j# o# I( e' J4 @3 l- s: o* s; i9 c - >>> Decimal('1.1') + Decimal('2.2')$ N0 L* I% ^0 x: V' c
- Decimal('3.3')
复制代码
; @4 ]$ K& p; `: ^% ^ - 通过设定有效数字,限定结果样式。
P" u7 Q- |# k* S" h3 [* w- >>> getcontext().prec = 6. {9 A |! w( _
- >>> Decimal(1)/Decimal(7)
3 a: G3 E2 @2 ?" y6 p' P - Decimal('0.142857')9 ]& \+ o2 ^ K
- >>> getcontext().prec = 28
& w5 S4 _. H0 u" D' k* Y& _6 f/ x - >>> Decimal(1) / Decimal(7); A6 g. Q$ Q; E# G( S+ W4 @; ~
- Decimal('0.1428571428571428571428571429')
复制代码
7 m* i, A4 W5 f+ w5 i7 ]% ^: E - 四舍五入,保留几位小数。
8 {- s. M; l, {: F1 ?3 w- >>> Decimal('12.3456').quantize(Decimal('0.00'))* v6 A3 z/ P# _4 K/ \
- Decimal('12.35')
. n' _" K- a' b& Q2 X: a! i# [2 @ - >>> Decimal('12.3456').quantize(Decimal('1.1'))
% j! B* r7 b( Z- S& N0 d$ H - Decimal('12.3')
复制代码 8 E, ]4 u' e4 X ^* H) t; H
|
|