Python 小數點精度

G8bao7發表於2015-07-15
參考: http://www.cnblogs.com/herbert/p/3402245.html

1. round(m, n)
如果不指定位數n的時候,返回的是一個整數,而且是最靠近的整數(這點上類似四捨五入)
整數部分: 當出現.5的時候,兩邊的距離都一樣,round()取靠近的偶數,這就是為什麼round(2.5) = 2
小數部分: 當出現.5的時候,如果要取捨的位數前的小樹是奇數,則直接捨棄,如果偶數這向上取捨
>>> round(2.635, 2)
2.63
>>> round(2.645, 2)
2.65
>>> round(2.655, 2)
2.65
>>> round(2.665, 2)
2.67
>>> round(2.675, 2)
2.67


2. 高精度使用decimal模組,配合getcontext
預設的context的精度是28位,可以設定為50位甚至更高,都可以。這樣在分析複雜的浮點數的時候,可以有更高的自己可以控制的精度。
注意:context裡面的這rounding=ROUND_HALF_EVEN 引數。ROUND_HALF_EVEN, 當half的時候,靠近even.
from decimal import *
>>> print(getcontext())
Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, capitals=1, clamp=0, flags=[], traps=[InvalidOperation, DivisionByZero, Overflow])
>>> getcontext().prec = 50
>>> b = Decimal(1)/Decimal(3)
>>> b
Decimal('0.33333333333333333333333333333333333333333333333333')
>>> c = Decimal(1)/Decimal(17)
>>> c
Decimal('0.058823529411764705882352941176470588235294117647059')
>>> float(c)
0.058823529411764705
 
3. 使用格式化(不推薦)
>>> a = ("%.2f" % 2.635)
>>> a
'2.63'
>>> a = ("%.2f" % 2.645)
>>> a
'2.65'
>>> a = int(2.5)
>>> a
2

其他. math模組
ceil(x)  大於或者等於x的最小整數。
floor(x) 小於或者等於x的最大整數。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26250550/viewspace-1734125/,如需轉載,請註明出處,否則將追究法律責任。

相關文章