PHP浮动比较
PHP float comparison
我有以下 PHP 代码,我想在其中比较两个十进制数。我在 PHP 文档中读到浮点数的精度有限。
$a = 0.0;
for ($i = 0; $i < 10; $i++) {
$a += 0.1;
}
var_dump($a);
echo gettype($a);
if ($a === 1.0) {
echo "IF";
} else {
echo "ELSE";
}
当我将变量 $a 与 1.0 进行比较时,它总是 returns 错误,结果将是 'ELSE'。我的问题是如何让上面的代码正常工作。
这个问题之前有人问过,见Compare floats in PHP。
基本上你需要计算差异,看看它是否小到可以接受 "equal"。
尝试这样的事情:
$a = 0.0;
for ($i = 0; $i < 10; $i++) {
$a += 0.1;
$a=number_format($a,1);
//echo gettype($a);
//echo $a.'<br>';
if (floatval($a) === 1.0)
echo "IF";
else
echo "ELSE";
}
为了进行比较,我会将 $a 截断到一位小数并将 $a 格式化为具有所需精度的字符串并将其与“1.0”进行比较。
要截断 $a 我建议 reading this answer .
或者您可以使用 $a 作为整数。它们不是递增 0.1,而是使用 1。并在最终比较中使用 10。
你可以这样做:
//只是检查它是否是浮点数,然后将其四舍五入为 1 个十进制数并进行比较
if(is_float($a)){
echo 'not a float';
$a = round($a,1);
}
输出将是'IF'
我有以下 PHP 代码,我想在其中比较两个十进制数。我在 PHP 文档中读到浮点数的精度有限。
$a = 0.0;
for ($i = 0; $i < 10; $i++) {
$a += 0.1;
}
var_dump($a);
echo gettype($a);
if ($a === 1.0) {
echo "IF";
} else {
echo "ELSE";
}
当我将变量 $a 与 1.0 进行比较时,它总是 returns 错误,结果将是 'ELSE'。我的问题是如何让上面的代码正常工作。
这个问题之前有人问过,见Compare floats in PHP。
基本上你需要计算差异,看看它是否小到可以接受 "equal"。
尝试这样的事情:
$a = 0.0;
for ($i = 0; $i < 10; $i++) {
$a += 0.1;
$a=number_format($a,1);
//echo gettype($a);
//echo $a.'<br>';
if (floatval($a) === 1.0)
echo "IF";
else
echo "ELSE";
}
为了进行比较,我会将 $a 截断到一位小数并将 $a 格式化为具有所需精度的字符串并将其与“1.0”进行比较。
要截断 $a 我建议 reading this answer .
或者您可以使用 $a 作为整数。它们不是递增 0.1,而是使用 1。并在最终比较中使用 10。
你可以这样做:
//只是检查它是否是浮点数,然后将其四舍五入为 1 个十进制数并进行比较
if(is_float($a)){
echo 'not a float';
$a = round($a,1);
}
输出将是'IF'