是否有PHP计算可能导致-0?

时间:2009-10-14 06:48:39

标签: php casting

我遇到了一个复杂的脚本有时遇到问题(在计算约90'000个值时大约2到3次),生成'-0'并将其写入数据库。我怀疑它是一个字符串(被计算的值可能导致整数,浮点数或字符串。)*

是否存在可能导致'-0'的PHP计算?

* =哦,我有时会错过强打字......

2 个答案:

答案 0 :(得分:5)

正如Gurdas所说,你可以在数据库中输入强大的内容。除此之外,我不知道你的问题的答案,但我知道如何处理这个问题。

正如我所理解的那样,问题在于你不知道在哪种情况下你会得到'-0',这是一个有效的floating point representation of 0。所以你必须找到你在哪种情况下得到它。我会选择两条路线之一:

  1. 使用Xdebug,当值为'-0'时,在数据库插入代码中引发错误,以获取带参数的stack_trace(使用xdebug.collect_params = 1)
  2. 在脚本的开头创建一个空字符串,使用结果和行填充所有操作和操作数。然后,在insert子句中添加一个if($ value ==' - 0'){print $ string; }

答案 1 :(得分:5)

将负数舍入正无穷大,如ceil()那样,可以产生-0。

echo ceil(-.7);

// -0

同样的结果,例如round(-.2)

这两个都将解决为真:

(-0 == 0)
(ceil(-.7) == 0)

虽然这些将分别解决为真和假:

(-0 === 0)
(ceil(-.7) === 0)

编辑:可以读取一个有趣的(并实现的)rfc here