簡體   English   中英

浮點到int錯誤

[英]Float to int error

昨天我幫助了一個人並得到了一個奇怪的錯誤,我無法向他解釋它是如何工作的。

代碼(在3台機器上測試(PHP 5.3和PHP 5.4))

// (float)65.35
$percentage = round(65.351, 2);
// (float) 6535
$total = $percentage * 100;
// (int) 6534
$int = (int) $total;

懷疑的是int值是6535但結果是6534

有人可以解釋發生了什么嗎?

第一次操作后你實際上沒有65.35。

>>> '%.20f' % (65.351 - 0.001,)
'65.34999999999999431566'

要么首先使用適當縮放的積分值開始,不要嘗試將值轉換為整數,或者在獲取整數值之前添加一個小值。

這與浮點 (讀取此鏈接中的警告!)值如何存儲在內存中有關。 實際上,在第一次操作之后,您沒有精確的十進制值,而是一個舍入值。 可能是65.34999999左右。 (該值存儲為位列表(0/1))

這就是為什么在談論金錢時,開發商不存儲美元/歐元,而是存儲美分金額。 這樣他們就可以避免使用精度不太精確的浮點數,而是使用精確的整數。

使用round而不是int

round($total)
$r=$explode('.',$total);
debug($r);

暫無
暫無

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

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