Пытаясь понять это поведение кода

Сегодня я работал над проектом 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 ,

3

Решение

float а также double иметь как положительный 0, так и отрицательный 0. Когда вы умножаете 0 * -1, вы получите -0, как указано в стандарте IEEE 754.

Примечание: 1/0 — положительная бесконечность, но 1 / -0 — отрицательная бесконечность.

Ты это видишь http://ideone.com/tBd41l

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

печать

-0.0

Math.floor не требуется.

3

Другие решения

Потому что PHP floor() возвращает число с плавающей точкой (по какой-то причине), и допускается, что число с плавающей точкой имеет отрицательный 0.

Это дает нормальный 0:

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

По вопросам рекламы [email protected]