在php中为什么是Float>字符串或浮点数> INT

时间:2014-02-17 10:00:53

标签: php

在进行现金转换测试时,我遇到了这个问题。如果我将510设置为intval(),它仍然表示float * 100小于string或int。为什么php会这样做?

$var = 4.73 + .37;
$amt = 510;
if($var * 100 > 510){
    echo 'wtf';
}

1 个答案:

答案 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

不要使用花车来存储金额,特别是对它们进行任何计算 - 使用美分或定点算术(如适用)