|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
decimal 模块为快速正确舍入的十进制浮点运算提供了支持。
8 k0 |3 [! e% [2 J5 p$ f// 它提供float数据类型有以下几个优点:
7 A0 }9 g: [. U+ N- 十进制数字可以准确表示:数字如 1.1 和 2.2 在二进制浮点中没有精确的表示。2 R6 _* x [! j
- >>> 1.1 + 2.2! G x; f% h3 q: h5 d6 B/ b/ d
- 3.30000000000000037 L4 |' o5 l8 V9 d, y
- >>> from decimal import Decimal
* t' ]" M. G& l, V - >>> Decimal('1.1') + Decimal('2.2')) i% w l: @( B- v4 D
- Decimal('3.3')
复制代码- 精确性延续到算术中。
- 保留尾随零以表示重要性。
- t) D! u7 H+ }: @: t; I' F
- >>> 1.20*1.30
! @$ [1 O$ R% j! ?* k$ A/ j - 1.560 W. p) o4 F- d/ Z9 U( f2 s* C) I3 T
- >>> Decimal('1.20')*Decimal('1.30')
+ C2 ]5 ?2 e( O - Decimal('1.5600')
复制代码 常用方法4 W/ i7 m! q+ L- ?; e8 q8 S, g
- class decimal.Decimal(value="0", context=None)
复制代码
) b) W* \! I1 I4 J1 }3 P- 可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。: `. R) Q+ S5 q8 ?9 }% I& G- Y
- >>> from decimal import *
( c+ \3 ^5 p/ T - >>> Decimal(1.1) + Decimal(2.2)" v* g! s1 K) q0 \/ y% a' k2 U
- Decimal('3.300000000000000266453525910'
1 {" X! X( z6 h9 C - >>> Decimal('1.1') + Decimal('2.2')3 J( G( n- u: h2 }) m. v
- Decimal('3.3')
复制代码
& e) W* a0 }/ ~+ k8 r - 通过设定有效数字,限定结果样式。 O$ _& O% m- Y" k
- >>> getcontext().prec = 6& D: Q- u$ }2 P' ?7 Z H8 E6 R
- >>> Decimal(1)/Decimal(7)
2 y! b) G1 m% R$ u - Decimal('0.142857')
4 B7 p3 Y& r( I1 B# V - >>> getcontext().prec = 28
5 l' h- H- [( Z3 {4 G - >>> Decimal(1) / Decimal(7)# _- ]( z) a, {. a$ B: U
- Decimal('0.1428571428571428571428571429')
复制代码
8 h6 n3 M" E9 U- p' d# t3 d - 四舍五入,保留几位小数。
( G- ^0 f! B; C1 E4 |. Y& b- >>> Decimal('12.3456').quantize(Decimal('0.00'))% M) d/ A% g( [/ T* Q* `
- Decimal('12.35')" h9 }# L8 c! h# s# `& ], O
- >>> Decimal('12.3456').quantize(Decimal('1.1'))
% K% W4 y7 F$ o) q/ K: ^& i0 Q - Decimal('12.3')
复制代码 ) S( ?4 B: O3 Z! s
|
|