PHP 中浮点数的比较。
在 PHP 中,测试浮点数的相等性是有问题的,因为在检查一个浮点数是否等于另一个浮点数时,PHP 会失败。尽管浮点数看起来具有相同的值,但实际上并不需要完全相同。因此,本文将演示我们在比较浮点数时面临的问题以及避免此问题的不同方法。
示例
让我们用一个简单的例子来测试一下
<?php
$a = 0.14;
$b = 1 - 0.86; //0.14
if($a == $b ){
echo 'a and b are same';
}
else {
echo 'a and b are not same';
}
?>输出
a and b are not same.
解释
在此代码中,即使 $a 和 $b 相同,也会执行 else 条件而不是 if 条件。这是由于浮点值的特性及其内部表示方式造成的。让我们讨论 PHP 中的不同情况,以避免在实际应用中出现此问题。
情况 1
演示通过使用计算机系统中计算中的最小差异来比较浮点值。
示例
<?php
$val1 = 2.183459;
$val2 = 2.183450;
$epsilon = 0.00001;
if(abs($val1 - $val2) < $epsilon) {
echo "True";
}
else {
echo "False";
}
?>输出
True
解释
在这里,我们使用了两个浮点变量 val1 和 val2 以及 epsilon。然后,我们利用名为 abs() 的原生函数获取变量 (val1 和 val2) 的绝对差值。此代码将给我们提供绝对值,但问题是为什么我们要取绝对值?答案是我们可以看到这两个值的小数位数在精度值 5 之前相同,这对于 PHP 来分析比较是困难的。
情况 2
使用 round() 函数。
<?php $val1 = 9 - 6.2; $val2 = 1.8; var_dump(round($val1, 2) == round($val2, 2)); ?>
输出
bool(true)
解释
在这里,我们使用了两个浮点变量 val1 和 val2。然后,我们使用名为 round() 的预定义函数,将浮点值四舍五入到两位小数,然后进行比较。在这里,我们使用预定义的 round() 函数以正确的方式获得我们期望的结果。
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP