2013-08-27 24 views
4
>>> a = 0.3135 
>>> print("%.3f" % a) 
0.314 
>>> a = 0.3125 
>>> print("%.3f" % a) 
0.312 
>>> 

不正確的舍入我期待0.313,而不是0.312 爲什麼是這樣的任何想法,並在那裏我可以用它來獲得0.313另一種方式?蟒蛇浮點數

感謝

+0

只是'圓(a)'? – alecxe

+3

爲什麼關於這個主題的37億個其他問題不適合你? :-) – paxdiablo

+3

搜索'IEEE 754'和'round to even'。舍入是*不*錯*。它符合標準。 – Bakuriu

回答

5

的Python 3輪根據IEEE 754標準,使用round-to-even方法。

如果你想圓以不同的方式再簡單地用手實現它:

import math 
def my_round(n, ndigits): 
    part = n * 10 ** ndigits 
    delta = part - int(part) 
    # always round "away from 0" 
    if delta >= 0.5 or -0.5 < delta <= 0: 
     part = math.ceil(part) 
    else: 
     part = math.floor(part) 
    return part/(10 ** ndigits) 

用法示例:

In [12]: my_round(0.3125, 3) 
Out[12]: 0.313 

注:python2四捨五入始終走從零開始,而在python3中則變爲均勻。 (例如,參見在2.7和3.3之間的round函數的文檔差異)。

0

嘗試

print '%.3f' % round(.3125,3)