我有一個perl腳本,可以將Excel XLS文件中的數據加載到數據庫中。首先,它檢查數據庫中是否存在來自文件的值的日期時間。如果確實如此,它會檢查文件中的值是否與數據庫中的值相同。如果它們相同,則跳過該值。如果它們不同,數據庫中的值會更新。爲什麼當值相同時,我的值比較返回false?
,做比較的代碼是:
if($dbVal != $fileVal) {
&UpdateData($id, $dt, $fileVal);
}
的問題是,有時,即使兩個值「看」相同,比較確定他們不是並執行更新子。以下是調試日誌的摘錄。對於文件中的每個值,它都會輸出db值和文件值。如果更新子被執行,「更新......」兩行文字:
dbVal = '68800812'; file val = '68800812'
dbVal = '66649164'; file val = '66649164'
Updating: 41248 : 01/01/2011 07:00 : 66649164
dbVal = '64975681'; file val = '64975681'
dbVal = '64037179'; file val = '64037179'
dbVal = '64095165'; file val = '64095165'
dbVal = '64917078'; file val = '64917078'
dbVal = '66584188'; file val = '66584188'
Updating: 41248 : 01/01/2011 12:00 : 66584188
所以在上面的片段中,有兩個實例,其中分貝VAL和文件VAL看起來是一樣的,但更新子無論如何都被執行了,這意味着當它看起來應該是錯誤的時候,比較返回true。
有什麼想法/想法?
戴夫
查看'Devel :: Peek :: Dump'和'sprintf'%.100f''的值。 – daxim 2012-03-20 15:50:40
使用'printf'查看值顯示出不同。看起來像「66649164」的值實際上是文件中的「66649164.000000007450580596923828125」。 >:\ 添加此作爲答案,我會接受它。 – DaveKub 2012-03-20 18:01:32