2015-07-30 5 views
3

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

+0

Возможный дубликат [Как может примитивное значение float быть -0,0? Что это значит?] (Http://stackoverflow.com/questions/6724031/how-can-a-primitive-float-value-be-0-0-what-does-that-mean) ... Подсказка для в следующий раз: помимо запуска другого примера на другом языке ... сделайте некоторые предварительные исследования ... например, на этом сайте здесь, чтобы понять, был ли задан этот вопрос раньше. И особенно для всего, что касается «основных» языковых элементов ... шансы ** очень высоки, да, у кого-то была такая же проблема раньше! – GhostCat

+0

'java! = Php' .... –

+0

Из-за' -1'. 'floor (0.0 * -1);' тот же результат. –

ответ

1

Поскольку РНР floor() возвращает поплавка (по некоторым причинам) и поплавки могут иметь отрицательное 0.

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

$x = 5.5; 
$y = 0; 
echo $z = floor($x * $y * -1 * -1); 
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 не требуется.

Смежные вопросы