先看一段**:
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...