mysql執(zhí)行時間為負數(shù)的原因分析
更新時間:2010年08月08日 13:45:06 作者:
今天看到有人把phpmyadmin中的執(zhí)行時間出現(xiàn)負數(shù)的情況視為phpmyadmin的bug, 其實這種情況的本質(zhì)是php中浮點數(shù)(float)的精度問題。
復(fù)制代碼 代碼如下:
<?php
list($usec, $sec) = explode(' ', microtime());
$timer = (float)$usec + (float)$sec;
mysql_query($query, $active_db);
list($usec, $sec) = explode(' ', microtime());
$stop = (float)$usec + (float)$sec;
$diff = $stop - $timer;
?>
$stop 和 $timer都是轉(zhuǎn)化后得到的浮點數(shù),大多數(shù)情況下,echo $stop 和 echo $timer得到的結(jié)果用肉眼觀察是相同的,但是它們在計算機中的存儲并不相同,所以結(jié)果不為0,也有可能為負。
php手冊中提示:
浮點數(shù)精度:
顯然簡單的十進制分數(shù)如同 0.1 或 0.7 不能在不丟失一點點精度的情況下轉(zhuǎn)換為內(nèi)部二進制的格式。這就會造成混亂的結(jié)果:例如,floor((0.1+0.7)*10) 通常會返回 7 而不是預(yù)期中的 8,因為該結(jié)果內(nèi)部的表示其實是類似 7.9999999999...。
這和一個事實有關(guān),那就是不可能精確的用有限位數(shù)表達某些十進制分數(shù)。例如,十進制的 1/3 變成了 0.3333333. . .。
所以永遠不要相信浮點數(shù)結(jié)果精確到了最后一位,也永遠不要比較兩個浮點數(shù)是否相等。如果確實需要更高的精度,應(yīng)該使用任意精度數(shù)學函數(shù)或者 gmp 函數(shù)。
相關(guān)文章
MYSQL必知必會讀書筆記第四章之檢索數(shù)據(jù)
MySQL是一種開放源代碼的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS)。接下來通過本文給大家介紹MYSQL必知必會讀書筆記第四章之檢索數(shù)據(jù),感興趣的朋友一起學習吧2016-05-05
mysql內(nèi)連接,連續(xù)兩次使用同一張表,自連接方式
這篇文章主要介紹了mysql內(nèi)連接,連續(xù)兩次使用同一張表,自連接方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12
MySQL?count(*),count(id),count(1),count(字段)區(qū)別
本文主要介紹了MySQL?count(*),count(id),count(1),count(字段)區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-05-05
CentOS下安裝mysql時忘記設(shè)置root密碼致無法登錄的解決方法
最近在給公司的內(nèi)網(wǎng)開發(fā)用服務(wù)器裝系統(tǒng),然后裝mysql居然就花了一天,原因是因為本人在CentOS下安裝萬mysql后,無法通過root進入,因為安裝的時候,并沒有設(shè)置root密碼而導致無法登錄,通過查找了資料終于解決了,現(xiàn)在想方法分享給大家,有需要的朋友們可以參考借鑒。2016-11-11
MySQL數(shù)據(jù)類型和常用字段屬性總結(jié)
這篇文章主要介紹了MySQL數(shù)據(jù)類型和常用字段屬性總結(jié),本文總結(jié)了日期和時間數(shù)據(jù)類型、數(shù)值數(shù)據(jù)類型、字符串數(shù)據(jù)類型等,需要的朋友可以參考下
2014-09-09 
