PHP零浮点返回true

PHP零浮点返回true,php,floating-point,boolean,Php,Floating Point,Boolean,我的mySQL db表中有一个类型为decimal(15,4)的字段 我以前从未经历过这种情况,但如果值为0.0000,我的PHP if语句将返回true 作为一项精神检查,我甚至做了: if(0.0000)回显“Hello World” 果然,Hello World呼应了。到底怎么回事?有人有什么想法吗?我的PHP版本(5.3.3)没有这种行为 我建议在进行检查之前将数字转换为bool:if((bool)$float)我认为问题在于您从db获得了一个字符串“0.0000”,而不是0.0000

我的mySQL db表中有一个类型为decimal(15,4)的字段

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

作为一项精神检查,我甚至做了:

if(0.0000)回显“Hello World”


果然,Hello World呼应了。到底怎么回事?有人有什么想法吗?

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


我建议在进行检查之前将数字转换为bool:
if((bool)$float)

我认为问题在于您从db获得了一个字符串
“0.0000”
,而不是
0.0000

请使用以下命令重试:

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

如果它是来自DB的浮点值,它将被视为字符串,而不是数字值。您可以尝试以下方法:

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

其中,
$value
包含来自DB的值。

我知道这个问题已经很久没有解决了,但我认为它可能会帮助其他人

浮点是实数的近似值。您会发现并非所有的
实数都可以用浮点数表示。这可能是您获得意外结果的原因。你应该读一读


但是,如果您需要更高的精度,您应该考虑使用BC数学库。

健全性检查不包括字符串。@KendallFrey他说值来自db,所以我认为问题中的代码是假的。他说他用该语句进行了健全性检查。我很确定文字值不是来自DB。Kendall是对的,它是从DB计算为true的,所以我在语句中放入文字值0.0000,得到了相同的结果result@Andy那么,在您的机器中
var_dump((bool)0.000)
的结果是什么呢?您的理智检查对我来说很好,PHPV5.2.6是的,它在我使用PHP5.3.13的服务器上按预期进行评估,但在使用相同PHP版本的不同服务器上评估的方式不正确。我在想php.ini或其他东西中一定有设置:\@Andy,无意冒犯,但我不相信你:)我认为你在一系列调试尝试中犯了一个诚实的错误。@chris令人尴尬的是,你是对的:\n假设这就是我从早上9点到4:30工作的结果。抱歉浪费你们的时间,伙计们!