比较php中的浮点数

比较php中的浮点数

我想比较一下PHP中的两个浮点,如下面的示例代码所示:

$a = 0.17;$b = 1 - 0.83; //0.17if($a == $b ){
 echo 'a and b are same';}else {
 echo 'a and b are not same';}

在此代码中,它返回else条件而不是if条件,即使$a$b都是一样的。有什么特殊的方法来处理/比较PHP中的浮点数吗?

如果是,请帮助我解决这个问题。

或者我的服务器配置有问题吗?


智慧大石
浏览 465回答 3
3回答

浮云间

如果你这样做,他们应保持原样。但请注意,浮点值的一个特点是计算看上去要得到相同的值,不需要实际上是相同的。所以如果$a是字面意思.17和$b通过计算,它们很可能是不同的,尽管两者都显示相同的值。通常,对于这样的相等性,您从不比较浮点值,您需要使用最小的可接受的差值:if&nbsp;(abs(($a-$b)/$b)&nbsp;<&nbsp;0.00001)&nbsp;{ &nbsp;&nbsp;echo&nbsp;"same";}差不多是这样的。

函数式编程

读红色警告在手册中第一。你绝不能把浮标比作平等。你应该使用epsilon技术。例如:if&nbsp;(abs($a-$b)&nbsp;<&nbsp;PHP_FLOAT_EPSILON)&nbsp;{&nbsp;…&nbsp;}哪里PHP_FLOAT_EPSILON常量表示一个非常小的数字(您必须在7.2之前的PHP旧版本中定义它)

万千封印

或者尝试使用BC数学函数:<?php$a = 0.17;$b = 1 - 0.83; //0.17echo "$a == $b (core comp oper): ", var_dump($a==$b);echo "$a == $b (with bc func)&nbsp; : ", var_dump( bccomp($a, $b, 3)==0 );结果:0.17 == 0.17 (core comp oper): bool(false)0.17 == 0.17 (with bc func)&nbsp; : bool(true)
打开App,查看更多内容
随时随地看视频慕课网APP