2 回答
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...。
请参阅此参考。
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 传递。
- 2 回答
- 0 关注
- 142 浏览
添加回答
举报