试图理解此代码行为

Trying to understand this code behaviour

今天我在做一个 PHP 项目,遇到了这个代码行为

<?php
$x = 5.5;
$y = 0;
echo $z = floor($x * $y * -1);
?>

这给出了 -0 的输出。 任何人都可以阐明为什么这与 -0 相呼应。但我预计 0 只有在添加楼层时才会发生这种情况。 我在 java.

中尝试了同样的方法
class Sample {
    public static void main(String[] args) {
        float x =5.5f;
        int y = 0;
        System.out.println(Math.floor(x*y*-1));
    }
}

这也会打印 -0.0 .

因为 PHP 的 floor() returns 一个浮点数(出于某种原因)和浮点数允许有负数 0。

这给出了一个正常的 0:

$x = 5.5;
$y = 0;
echo $z = floor($x * $y * -1 * -1);

floatdouble 都有一个正 0 和一个负 0。当您乘以 0 * -1 时,您将得到 IEEE 754 标准中指定的 -0。

注意:1/0 是正无穷大,1/-0 是负无穷大。

你可以看到http://ideone.com/tBd41l

System.out.println(0f * -1);

打印

-0.0

Math.floor 不是必需的。