这个问题最好用代码表达:
$var1 = 286.46; // user input data
$var2 = 3646; // user input data
$var3 = 25000; // minumum amount allowed
$var4 = ($var1 * 100) - $var2; // = 250000
if ($var4 < $var3) { // if 250000 < 250000
print 'This returns!';
}
var_dump($var4)
输出:float(25000)
转换为 int 时,输出:int(24999)
- 从而问题所在。
虽然我真的不知道该怎么办。乘以 100 时会出现此问题,虽然我可以采取一些小技巧来解决这个问题(例如 *10*10),但我想知道是否有解决此问题的“真正”解决方案。
谢谢 :)
最佳答案
这是一个可怕的 hacky 解决方案,我有点讨厌自己,但这给出了预期的行为:
<?php
$var1 = 286.46; // user input data
$var2 = 3646; // user input data
$var3 = 25000; // minumum amount allowed
$var4 = ($var1 * 100) - $var2; // = 250000
if ((string) $var4 < (string) $var3) { // if 250000 < 250000
print 'This returns!';
}
将它们转换为字符串,然后根据需要将它们转换回 int/float 以进行比较。我不喜欢它,但它确实有效。
你真的需要BC Math用于 PHP 中的精确 float 学运算。
关于php - 浮点乘法和评估问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9159427/