亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

(int) 不能正確地對乘法結果進行類型轉換

(int) 不能正確地對乘法結果進行類型轉換

PHP
夢里花落0921 2022-01-14 16:50:55
如果我使用 (int) 在浮點類型變量和整數之間轉換乘積,則結果不是我所期望的。請看我的代碼。期望結果是 4090270,而不是 4090269(int)(4090270.0) 工作正常$amount = 40902.70; // Same for  40902.20$amount= (int)($amount*100);echo $amount; /// Output :  4090269
查看完整描述

2 回答

?
MMTTMM

TA貢獻1869條經驗 獲得超4個贊

切勿將未知分數轉換為整數,因為這有時會導致意外結果。

根據 PHP 文檔

浮點數的精度有限。盡管取決于系統,但 PHP 通常使用 IEEE 754 雙精度格式,由于在 1.11e-16 的數量級四舍五入,這將給出最大的相對誤差。非初等算術運算可能會產生較大的誤差,當然,當多個運算復合時,必須考慮誤差傳播。

此外,可以精確表示為以 10 為底的浮點數的有理數,如 0.1 或 0.7,沒有精確表示為以 2 為底的浮點數,無論尾數大小如何,它都在內部使用。因此,它們不能被轉換成它們內部的二進制對應物,而不會有小的精度損失。這可能會導致令人困惑的結果:例如, floor((0.1+0.7)*10) 通常會返回 7 而不是預期的 8,因為內部表示將類似于 7.9999999999999991118...。

請參閱此參考。


查看完整回答
反對 回復 2022-01-14
?
慕碼人2483693

TA貢獻1860條經驗 獲得超9個贊

像這樣試試。


$amount = 40902.70; // Same for  40902.20

$amounts= intval(strval($amount*100));;

echo $amounts;

注意:intval 和 int 通過截斷數字的小數部分將雙精度數轉換為整數。


欲了解更多信息檢查:參考


$test1 = intVal(1999);


$amount = 19.99 * 100;

$test2 = intVal($amount);

$test3 = intVal("$amount");


echo $test1 . "<br />\n";

echo $test2 . "<br />\n";

echo $test3 . "<br />\n";


expected output:

1999

1999

1999


actual output

1999

1998

1999

似乎是一個浮點問題,但數字 1999 是我能夠做到這一點的唯一數字。19.99 是很多東西的價格,為了我們的目的,我們必須將它作為 1999 而不是 19.99 傳遞。


查看完整回答
反對 回復 2022-01-14
  • 2 回答
  • 0 關注
  • 167 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號