PHP零浮点返回true

时间:2012-05-26 11:54:42

标签: php floating-point boolean

我的mySQL db表中有一个十进制类型字段(15,4)

我之前从未经历过这种情况,但如果值为0.0000我的PHP if语句返回true!

作为一项完整性检查我甚至做过:

if(0.0000) echo "Hello World";

果然,Hello World回声消失了。这到底是怎么回事?有人有任何想法吗?

4 个答案:

答案 0 :(得分:3)

如果它是从DB发出的浮点值,它将被视为字符串,而不是数字值。你可以试试这个:

if(floatval($value) > 0) { ... }

$value包含来自DB的值。

答案 1 :(得分:1)

我认为问题是你从db获得了一个字符串"0.0000",但没有0.0000

再试一次:

if ((int)$your_value) echo "Hello World";

答案 2 :(得分:0)

我的PHP版本(5.3.3)上没有这种行为。

我建议您在检查前将号码转换为 bool if ((bool) $float)

答案 3 :(得分:0)

我知道自从这个问题被打开以来已经很久了,但我认为这可能有助于其他人。

浮点数实际上是Real Number的近似值。您会发现并非所有Real numbers都可以由浮点数表示。这可能是您获得意外结果的原因。你应该读一读 http://php.net/manual/en/language.types.float.php

如果你需要更高的精度,你应该看看使用BC Math lib http://php.net/manual/en/ref.bc.php