到目前为止,我们已经看到了为什么在PHP中使用float值时会发生这种奇怪的行为。现在来看看我们如何在PHP中处理这些浮点值。
首先,我们将看到如何在比较浮点值的同时陷入浮动值的陷阱。我们将通过代码示例以更好的方式理解这一点。请参考下面的几个代码块来检查相同:
1 2 3 4 | $ a = 5.69 ; $ b = 5.69 ; var_dump ($ a == $ b ); //输出:bool(true) |
在上面的代码块中,我们可以看到两个值都相同并给出了正确的结果。现在让我们检查PHP中比较float值的棘手部分。
1 2 3 4 | $ a = 5.63 + 0.06 ; $ b = 5.69 ; var_dump ($ a == $ b ); //输出:bool(false) |
在比较浮点值时,快速简单地解决此问题的方法是将其转换为字符串并比较这些值。现在它将比较两个字符串,它没有任何精度错误。
1 2 3 4 | $ a = (字符串) (5.63 + 0.06 ); $ b = (字符串) 5.69 ; var_dump ($ a == $ b ); //输出:bool(true) |
如果您认为(像我一样)转换为字符串会给我们一个正确的结果。但不是理想的解决方案,那么下一个解决方案就是为您服务。
要获得上述问题的解决方案,我们需要安装PHP的BCMath PHP扩展。您可以阅读本文,了解如何在PHP中安装PHP BCMath。
完成BCMath扩展安装后,可以使用下面的代码并获得正确的结果。我们将使用bcadd方法而不是直接求和。
1 2 3 4 | $一个 = bcadd (5.63 , 0.06 , 2 ); $ B = bcadd (5.69 , 0 , 2 ); var_dump ($ a == $ b ); //输出:bool(true) |
让我们看看同一种情况的另一个例子:
最新推荐