2012-10-13 68 views
0

我這裏一些Python代碼定義浮點數的精度在Python

代碼:

t = 1 
xt = array([ -1.,-1. ]) 

xt[0] = theta[0][0]* P_all_States[t-1][0] + theta[1][0]*P_all_States[t-1][1] 

xt[1] = theta[0][1]* P_all_States[t-1][0] + theta[1][1]*P_all_States[t-1][1] 

P_all_States[t][0] = xt[0] 
P_all_States[t][1] = xt[1] 
print ("Added probability distribution for time t = " + str(t) + " to P_all_States") 
print P_all_States 

輸出:

時間t增加概率分佈= 1至P_all_States [[0.6,0.4],[0.62000000000000011,0.38000000000000006],[-1.0,-1.0],[-1.0,-1.0],[-1.0,-1.0],[-1.0,-1.0〕〕

我怎樣才能得到浮點數來舍入2 sigficant數字?

這些都是浮動,所以我不是找這些轉換爲字符串,我希望他們能夠繼續作爲浮動

感謝

+2

相關:numpy的的[漂亮的印刷。數組](http://stackoverflow.com/q/2891790/4279),即'np.set_printoptions(precision = 2)' – jfs

回答

2
>>> round(0.62000000000000011,2) 
0.62 
+1

您應該注意,這實際上並不導致值「0.62」。 '打印decimal.Decimal(圓(0.62000000000000011,2))' - > '0.61999999999999999555910790149937383830547332763671875'。 – senderle

3

我不知道你的意思,但如果你的意思是你如何將它們的值修改爲0.62等等:由於它們的性質,這對浮點數是不可能的。你可以使用小數而不是浮點數來解決這個問題。 如果你的意思如何,只有2位小數,使用打印彩車:

print '{:3.2f}'.format(somefloat) 
+0

http://en.wikipedia.org/wiki/Machine_epsilon –

0

要轉換的整個列表,結合@Zashas回答有:

rounded = [ [round(a[0],2), round(a[1],2)] for a in P_all_States ] 
+0

它是列表的列表,因此,上述贏得」噸做的工作,需要像:四捨五入= [[輪(A [0],2),圓(a [1],2)]爲一個在P_all_States] –

+0

對不起 - 沒有意識到這一點。好吧,你糾正了它。謝謝! –