在进行现金转换测试时,我遇到了这个问题。如果我将510设置为intval(),它仍然表示float * 100小于string或int。为什么php会这样做?
$var = 4.73 + .37;
$amt = 510;
if($var * 100 > 510){
echo 'wtf';
}
答案 0 :(得分:5)
所有关于浮点运算。每种其他编程语言都会出现同样的问题
最简单的例子: 0.1 + 0.2 = 0.30000000000000004
如果您使用echo
甚至var_dump
,您将无法看到它,因为它会被截断以便以人性友好的形式显示,但您可以在此处清楚地看到它:
$a = 0.3; // true 0.3
$b = 0.1 + 0.2; // approximately 0.3
var_dump($a); // 0.3
var_dump($b); // 0.3
var_dump($a == $b); // false
var_dump($a == 0.3); // true
var_dump($b == 0.3); // false
var_dump($a == 0.30000000000000004); // false
var_dump($b == 0.30000000000000004); // true
不要使用花车来存储金额,特别是对它们进行任何计算 - 使用美分或定点算术(如适用)