php ceil取整的問題,求解。

來源:互聯網
上載者:User
`var_dump(ceil(2.2*100)/100);
var_dump(ceil(strval(2.2*100))/100);`

輸出的結果分別是
float 2.21
float 2.2
為什麼這兩種情況的值會不同?大神求解。

回複內容:

`var_dump(ceil(2.2*100)/100);
var_dump(ceil(strval(2.2*100))/100);`

輸出的結果分別是
float 2.21
float 2.2
為什麼這兩種情況的值會不同?大神求解。

從某乎上看到的答案。雖然還是不明白底層原理。

浮點小數
很多普通的十進位小數在二進位下並不是有限位的小數,有限的數值位並不能精確地記錄數位值
所以你以為的2.20在
echo sprintf('%10.30f', 2.20*100);
的時候
看到的會是
220.000000000000028421709430404007

可能這和ceil二關,是浮點運算的問題吧。

結合 @jsutking 的實驗,很容易理解第1個的答案是 2.21,因為它是 ceil(220.000000000000028421709430404007) 的結果。

而第 2 個,估計是 strval(2.2 * 100) 的時候自動取了一個不大的精度,ceil(220.0000000000000) 算出來都是 220 啦。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.