【问题标题】:Mathematical/Comparison checks not working [duplicate]数学/比较检查不起作用[重复]
【发布时间】:2021-08-01 07:02:41
【问题描述】:

请检查以下代码。

$value1= 57.6;
$value2 = 177.6000 - 120.0000;
echo $value1.' '.$value2."<br/>";
var_dump($value1);
echo "<br/>";
var_dump($value2);
echo "<br/>";
var_dump($value1==$value2);
echo "<br/>";
var_dump($value1>$value2);
echo "<br/>";
var_dump(57.6 > (177.6000 - 120.0000));

如果您检查 $value1 和 $value2 没有区别,但是当我使用 $value1>$value2 时,它满足了不应发生的条件。下面是输出

57.6 57.6
float(57.6)
float(57.6)
bool(false)
bool(true)
bool(true)

【问题讨论】:

标签: php comparison-operators


【解决方案1】:

PHP(如大多数编程语言、电子表格等)使用 IEEE 浮点数,它通常不能准确表示十进制数

如果你减去$value1-$value2,你会看到结果很小但不是零

在大多数情况下,近似的优点大于缺点;但是,不准确的地方时不时会加起来并导致真正的问题

最常见的警告是== 对于浮点数几乎没有用处;相反,减去这两个值并检查(绝对值)结果是否适当小(小于某个值,通常模糊地称为“epsilon”)

【讨论】:

    猜你喜欢
    • 2017-06-20
    • 2023-03-28
    • 1970-01-01
    • 2013-02-06
    • 1970-01-01
    • 2021-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多