4

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

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

作为健全性检查,我什至做了:

if(0.0000) echo "Hello World";

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

4

4 回答 4

4

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

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

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

于 2012-05-26T12:29:10.293 回答
2

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

再试一次:

if ((int)$your_value) echo "Hello World";
于 2012-05-26T12:01:31.147 回答
1

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

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

于 2012-05-26T12:00:11.453 回答
1

我知道自从这个问题被打开以来已经很长时间了,但我认为它可能会对其他人有所帮助。

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

但是,如果您需要更高的精度,您应该考虑使用 BC Math 库的http://php.net/manual/en/ref.bc.php

于 2015-08-20T00:27:06.657 回答