經典錯誤, Python小數比較

2021-06-26 08:57:57 字數 2339 閱讀 7204

先看一段**:

print 'hu=',hu

print 'hm=',hm

fc = float(hm[1])-float(hm[0])

fa = float(hm[2])-float(hm[0])

fd = float(hm[3])-float(hm[0])

ge = float(hm[6])-float(hm[4])

real_date=[fc,fa,fd,ge]

print 'fc =',fc,' fa =',fa,' fd=',fd,' ge=',ge  

wt = 0

for x in xrange(len(real_date)):                           

if(float(real_date[x]) != float(dbfiledate[x])):                              

print real_date[x],' break ',float(dbfiledate[x])

wt = 2

break

return wt

real_date的資料與

dbfiledate資料是從檔案中取到的:

按理來說,以上**從這兩個檔案中取得資料,再去對比,肯定沒有什麼問題。

但是,一執行就是有問題,程式對比245.0與245.0就判定為不相等了。

當時,搞的我蒙,怎麼會這樣,浮點型與

浮點型可以啊:

結果是

後來,我又這樣寫,轉成整數比較吧

for x in xrange(len(real_date)):                           

db_x = int(float(real_date[x]) * 1000)

print 'db_x',db_x

db_y = int(float(dbfiledate[x]) * 1000)

print ' db_y ',db_y

if (db_x != db_y):                  

print real_date[x],' break ',float(dbfiledate[x])

print db_x,' int ',db_y

wt = 2

break

結果同樣讓你心碎

轉成int後,精度丟失了,245.0變成了249.9999,打了這麼多年仗,我第一次感覺到這麼無奈,這樣折騰2,3個小時,算了,先出去走走吧,走到了外面,突然,我想到乙個問題,python的**是用utf-8,而我的系統是xp,xp的預設編碼是gbk,會不會因為這樣的原因呢?

程式指定了utf-8

我馬上修改了一下程式,把從檔案中讀取的資料全部轉成utf-8

wt = 0

for x in xrange(len(real_date)):

x11 =str(real_date[x]).decode('utf-8').encode('utf-8')

x12 = float(x11)

y11 = dbfiledate[x].decode('utf-8').encode('utf-8')

y12 = float(y11) 

print x12," == ",y12              

if(x12 != y12):

print x12,' break ',y12        

wt = 2

break

一執行程式,完美解決:

歸根到底,就是因為編碼問題造成的

python小數錯誤 python 小數點問題

我想生成一組小數,大小為從0到1,間隔為0.2,即 0,0.2,0.4,0.6,0.8,1 1.while迴圈生成 a list i 0 while i 1 i 0.2 print a list 列印結果為 0,0.2,0.4,0.6000000000000001,0.8,1.0 奇怪,為什麼會有0...

php小數比較

浮點型數字不能進行比較,因為存在精確度的問題,所以可能比較出來的結果不符 解決問題用到的函式 strcmp 比較兩個字串 區分大小寫 strcmp string1,string2 語法 引數 描述 string1 必需。規定要比較的第乙個字串。string2 必需。規定要比較的第二個字串。返回值 0...

shell if 小數 比較

shell的 對於數值的判斷都是基於整數的,如果碰到小數就無能為力了。google了一把發現用awk的牛人多,不過發現乙個兄弟的更加好。if expr a b eq 0 then echo b is bigger else echo a is bigger fi通過expr來進行判斷,所以a 和 b...