(int) 不能正确地对乘法结果进行类型转换

如果我使用 (int) 在浮点类型变量和整数之间转换乘积,则结果不是我所期望的。请看我的代码。


期望结果是 4090270,而不是 4090269


(int)(4090270.0) 工作正常


$amount = 40902.70; // Same for  40902.20

$amount= (int)($amount*100);

echo $amount; /// Output :  4090269


梦里花落0921
浏览 148回答 2
2回答

MMTTMM

切勿将未知分数转换为整数,因为这有时会导致意外结果。根据 PHP 文档浮点数的精度有限。尽管取决于系统,但 PHP 通常使用 IEEE 754 双精度格式,由于在 1.11e-16 的数量级四舍五入,这将给出最大的相对误差。非初等算术运算可能会产生较大的误差,当然,当多个运算复合时,必须考虑误差传播。此外,可以精确表示为以 10 为底的浮点数的有理数,如 0.1 或 0.7,没有精确表示为以 2 为底的浮点数,无论尾数大小如何,它都在内部使用。因此,它们不能被转换成它们内部的二进制对应物,而不会有小的精度损失。这可能会导致令人困惑的结果:例如, floor((0.1+0.7)*10) 通常会返回 7 而不是预期的 8,因为内部表示将类似于 7.9999999999999991118...。请参阅此参考。

慕码人2483693

像这样试试。$amount = 40902.70; // Same for&nbsp; 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:199919991999actual output199919981999似乎是一个浮点问题,但数字 1999 是我能够做到这一点的唯一数字。19.99 是很多东西的价格,为了我们的目的,我们必须将它作为 1999 而不是 19.99 传递。
打开App,查看更多内容
随时随地看视频慕课网APP