php 浮點數運算

2021-07-02 15:29:39 字數 615 閱讀 5706

php -r "echo (0.1+0.7) == 0.8 ?'true':'false';"

了解浮點運算的都不難理解以上**執行時會得到false;這是因為很多的10進製數都不能精確的轉成2進製,或如果要精確轉換的話需要的二進位制數太長,會捨棄掉末尾部分,只儲存一定的精度。

比如0.1(十進位制)=0.0001100 1100 1100 ...,0.7=0.101100 1100 1100.

這兩個數轉成2進製時是乙個無線迴圈小數 1100 會無限迴圈。假設進度為10位,那麼

0.1(十進位制)= 0.00011 00110;

0.7(十進位制) = 0.10110 01100;

0.1+0.7 =   0.11001 10010;

0.8(十進位制) = 0.1100 1100 11;(1100)

精度到10位時已經發現相加的結果不一樣了,而預設的浮點數的精度比10大,所以0.1+07!=0.8;

但是精度位數小時,比如9位,就能得到正確的結果,0.1+0.7==0.8。這也給了乙個解決浮點數運算時因為精度問題導致得不到正確運算結果的方法,那就是控制精度。

但是具體控制到多少,還得依賴使用場景,一般來說不能小於原始資料的精度,運算進度再相對擴大一點,就能滿足要求了

浮點數運算

浮點數運算的公式 n m re n代表浮點數 m代表尾數 r代表基數 e代表指數 所謂浮點數就是類似我們高中學的科學計數法 比如 1000 就表示為 1.0 103 那麼浮點型計算就是兩個用科學計數法表示的數之間進行的計算 例如 1.0 102 1.19 103 該如何計算 步驟 1.對階 所謂對階...

浮點數運算

今天學習了浮點數運算 加減乘除 浮點數運算主要包括兩部分 指數運算和尾數運算。在ieee754標準下,指數運算就是階碼的運算,類似於無符號數運算。尾數運算是原碼運算。之前一直很疑惑為什麼前面的教材在介紹原碼運算 加減乘除 所舉的例子都是小數運算。現在猜想那部分內容可能只是為了浮點數運算做鋪墊,這裡才...

PHP浮點數運算精度問題

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