浮点乘法和评估问题

use*_*140 5 php floating-point casting

这个问题最好用代码表示:

$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!';
}
Run Code Online (Sandbox Code Playgroud)

var_dump($var4)输出:float(25000)当转换为int时,输出:int(24999)- 从而解决问题.

我不知道该怎么办.问题发生在乘以100后,虽然我可以做很少的技巧来解决这个问题(例如*10*10)我想知道是否有一个"真正的"解决方案来解决这个问题.

谢谢 :)

Jas*_*per 0

这就是浮点数有时会做的事情,这都是因为浮点数有时无法精确表示整数。

您可以将数字舍入为整数值,然后将其转换为 int,而不是将其转换为 int。(可能这种强制转换是不必要的,但是 PHP 并不清楚这些事情在内部是如何发生的,即使你现在知道它们是如何发生的,将来也可能不会。