2015-10-27 97 views
1

我真的想要有人,誰可以解釋我,爲什麼ROUND函數正在計算這種方式。我不認爲,在過去的40年裏,我發現了其他人沒有的東西,只是我不能相信這是這樣的作品,我真的想知道這個原因。ROUND函數計算錯誤?

當然,我試圖在這裏搜索,並在網上,但我發現只有用戶創建函數的問題。

當我想檢查MySql中的ROUND函數語法時,整個事情就是從這裏來的。

我在this網站上找到了此解釋。

enter image description here

我真的不知道,是函數只檢查小數點後第三位,而不要解析第四,當我想四捨五入到2位小數。

所以我在MySqlPHP也做了測試,結果也一樣。

var_dump(round(4.4449, 2)); 
var_dump (round(4.445, 2)); 

輸出:

float 4.44 
float 4.45 

這怎麼可能?我想:

4.4449 
    ^^ <-- this 49 should be 50 so 5. 

好吧,我真的不想計算彈道軌跡與PHP火箭的,但如果是真錢,那裏有一個網上商店數以百萬計的交易,我認爲,一個多有點讓人浮想聯翩。

請告訴我,有什麼是因爲我看不到樹木。

+1

我無法看到問題。如果所需精度之後的* next *數字小於5,則舍入向下。如果它是> = 5,四捨五入。考慮之後的數字並不重要。請注意,在你的'4.4449'例子中,你想要**兩次**,這是一個禁忌。 – usr2564301

+1

也許我誤解了,但由於4.4449比4.45更接近4.44,所以我期望'ROUND(4.4449,2)'返回4.44。在你的最後一個例子中,你將四點四四四九舍入四點,這確實是4.445。 – xnx

+0

自49!= 50爲什麼你說「這49應該是50」? –

回答

2

這是正確的,四捨五入清楚地說:「如果十進制大於或等於0,5,將其升至1,否則將其設置爲0」。

0,4999999999999 >= 0,5