我知道这些问题可能会被问到很多,但从我的阅读和测试来看,它让我有点困惑,而且我所做的很多阅读让我更加困惑,因为它非常复杂。
有些人似乎对简单的比较有问题,但我自己没有问题。
例如……
$num1 = 27.64;
$num2 = 27.64;
if ($num1 == $num2) {
echo 'Good!';
} else {
echo 'Bad!';
}
// Echo's "Good!"
...和
$num1 = 27.60;
$num2 = 27.6;
if ($num1 == $num2) {
echo 'Good!';
} else {
echo 'Bad!';
}
// Echo's Good
...和
$num1 = 27.60;
$num2 = 57.60;
if ($num1 <= $num2) {
echo 'Good!';
} else {
echo 'Bad!';
}
// Echo's Good
...和
$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/ 的页面这似乎有简单的问题,但我不明白。
我只是想了解他是如何在使用他的简单代码时遇到问题的,但我不了解我的代码。
最佳答案
例子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 可以用 float 表示,所以 12.5 + 12.5 也是(0.5 是 2^-1)。
关于php - 理解 php 中的 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10991713/