我知道这些问题可能会被很多人问到,但从我的阅读和测试来看,它让我有点困惑,而且我所做的很多阅读让我更加困惑,因为它非常复杂。
有些人似乎对简单的比较有问题,但我自己没有问题。
例如...
$num1 = 27.64;
$num2 = 27.64;
if ($num1 == $num2) {
echo 'Good!';
} else {
echo 'Bad!';
}
// Echo's "Good!"
...and
$num1 = 27.60;
$num2 = 27.6;
if ($num1 == $num2) {
echo 'Good!';
} else {
echo 'Bad!';
}
// Echo's Good
...and
$num1 = 27.60;
$num2 = 57.60;
if ($num1 <= $num2) {
echo 'Good!';
} else {
echo 'Bad!';
}
// Echo's Good
...and
$num1 = 25.00;
$num2 = 12.50 + 12.5;
if ($num1 == $num2) {
echo 'Good!';
} else {
echo 'Bad!';
}
// Echo's Good
然后我看到类似的页面http://patchlog.com/php/comparing-float-values-in-php/ http://patchlog.com/php/comparing-float-values-in-php/这似乎有简单的问题,但我不明白。
我只是想了解他的简单代码是如何遇到问题的,但我不同意我的代码。
实施例1
这些值将是相同的——您为每个变量分配相同的十进制文字。将其与此代码进行比较:
$num1 = 27.64;
$num2 = 10.0 + 2.88 + 2.88 + 2.88 + 9.0; //In decimal arithmetic adds to 27.64
if ($num1 == $num2) {
echo 'Good!';
} else {
echo 'Bad!';
}
// Echo's "Bad!"
$num2 看起来应该是 27.64,但它确实增加了类似 27.639999999999997015720509807579219341278076171875 的值(这就是我在我的机器上用 Visual C++ 进行计算时得到的结果)。 $num1 = 27.6400000000000005684341886080801486968994140625(在我的机器上),所以它们不同。
实施例2
后面的 0 没有区别。
实施例3
这些数字不在浮点“容差”范围内,因此当然会有所不同。
实施例4
12.5 可以精确地用浮点数表示,因此 12.5 + 12.5 也是如此(0.5 是 2^-1)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)