簡體   English   中英

PHP - 將字符串浮點數轉換為整數 - 錯誤值

[英]PHP - Converting a String float to an Integer - Wrong value

為什么此代碼提供 853 而不是 854?

(int) ((float) ( "8.54") * 100);

如何將(字符串) "8.54"轉換為(整數) 854

首先,閱讀浮點數學是否損壞?

8.54 恰好是可以精確寫成十進制但不能寫成二進制的數字之一,因此(float)"8.54"實際上會創建一個非常接近但略低於 8.54的數字。

將其乘以 100 將創建一個非常接近但略低於 854的數字。 並且轉換為int將找到下一個最小整數(例如 853.9 變為 853,而不是 854)。

我可以想到兩個解決方案:

  • 乘以 100 后,四舍五入到最接近的整數,然后轉換為整數。 與 8.54 不同,854 本身可以用浮點數精確表示,因此round(8.54 * 100)將給出一個正好是854 的數字,而不是略低於它。 所以(int)round((float)"8.54" * 100)將給出 854 作為整數。
  • 不要乘以 100,而是刪除. 從字符串中,直接轉換為int,例如(int)str_replace(".", "", "8.54"));

intval(str_replace(".", "", "8.54"))

嘗試不使用 (int)。 像這樣 => (float) ("8.54") * 100; 在這種情況下 (int) 沒有必要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM