PHP手冊 關於浮點數精度的警告

2021-06-08 05:21:59 字數 415 閱讀 5464

以下第乙個按理會返回8結構是7 為什麼呢

(int)( (0.1+0.7) * 10 ) //7

(int)( (0.1+0.6) * 10 ) //7

查了php手冊發現如下,才了解:

顯然簡單的十進位制分數如同 0.1 或 0.7不能在不丟失一點點精度的情況下轉換為內部二進位制的格式。這就會造成混亂的結果:例如,floor((0.1+0.7)*10)通常會返回7 而不是預期中的 8,因為該結果內部的表示其實是類似 7.9

。 這和乙個事實有關,那就是不可能精確的用有限位數表達某些十進位制分數。例如,十進位制的1/3 變成了 0.3

。 所以永遠不要相信浮點數結果精確到了最後一位,也永遠不要比較兩個浮點數是否相等。如果確實需要更高的精度,應該使用任意精度數學函式或者gmp 函式。

php浮點數精度警告

先出道題 echo intval 0.1 0.7 10 會輸出多少?8?7!在講為什麼前先再重溫一下php的int 整型 integer 的形式描述 decimal 1 9 0 9 0hexadecimal 0 xx 0 9a fa f octal 0 0 7 integer decimal hex...

PHP 浮點數的精度

浮點數的精度有限。儘管取決於系統,php 通常使用 ieee 754 雙精度格式,則由於取整而導致的最大相對誤差為 1.11e 16。非基本數 算可能會給出更大誤差,並且要考慮到進行復合運算時的誤差傳遞。此外,以十進位制能夠精確表示的有理數如 0.1 或 0.7,無論有多少尾數都不能被內部所使用的二...

PHP浮點數運算精度問題

最近有客戶反應 訂單金額總是不準確,總是相隔一分錢。檢查相關 邏輯都是正確的,就是運用了四則運算。大概推測問題可能出在浮點計算丟失精度。在 php程式設計師雷雪松的部落格 中寫過一篇關於js精度不準確的文章 js中浮點數運算不精準 下面php程式設計師雷雪松詳細的介紹一下如何解決php浮點數運算精度...