php - 理解 php 中的 float

标签 php floating-point floating-accuracy

我知道这些问题可能会被问到很多,但从我的阅读和测试来看,它让我有点困惑,而且我所做的很多阅读让我更加困惑,因为它非常复杂。

有些人似乎对简单的比较有问题,但我自己没有问题。

例如……

$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/

相关文章:

php - 重复密码在 Yii2 中不起作用

php - 每个用户都应该有一个单独的孤立数据库吗?

java - 在 Java 中 parseFloat 的正确方法是什么

python - 四舍五入在 python 中向上 float $.01

PHP,mysql SELECT 语句不工作

php - 将 PHP 对象设置为全局?

c++ - 找出数组中有多少个不同的浮点值

c++ - std::fmod(4.2, 0.12) 等于 epsilon * 1.5

math - float 学有问题吗?

c++ - IEEE 浮点实现、精度和近似值的累积