在进行现金转换测试时,我遇到了这个问题.如果我将510设置为intval(),它仍然表示float*100小于string或int.为什么php会这样做?
$var = 4.73 + .37;
$amt = 510;
if($var * 100 > 510){
echo 'wtf';
}
Run Code Online (Sandbox Code Playgroud)
这都是关于浮点运算的.每种其他编程语言都会出现同样的问题
最简单的例子: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
Run Code Online (Sandbox Code Playgroud)
不要使用浮动来存储金额,特别是对它们进行任何计算 - 使用美分或定点算术(如果适用)
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |