Загадка про PHP. Номер 5.

Что выведет echo?

echo floor((0.1+0.7)*10);

Комментарии 12

Baka № 1
Это ж прямо из документации :-)

[Q]
Never cast an unknown fraction to integer, as this can sometimes lead to unexpected results.
echo (int) ( (0.1+0.7) * 10 ); // echoes 7!
See for more information the warning about float-precision.

[Q]
Евгений Степанищев автор № 2
Оттуда и есть :) А ты это всегда помнишь? :)
Baka № 11
BOLK: Оттуда и есть :) А ты это всегда помнишь? :)

Этот конкретный пример — не всегда. :)
На этот пример наткнулся случайно — когда смотрел
про преобразования типов (для примера про «логический» тип).
А то, что «10.0 times 0.1 is hardly ever 1.0.»
(это из файла /usr/share/games/fortunes/fortunes ^_~) —
это в любом приличном учебнике по программированию написано
(если про плавающую точку там упоминается).
На МК-61 даже «2 в степени 2» было 3.99999996 (число девяток не помню). :-)

Евгений Степанищев автор № 12
Вообще неудобно, что такие вещи присутствуют. Это же почти баг. Или не почти.
Улитка № 7
За кого вы меня принимаете! Я еще ни разу не запускал эти примеры на PHP, о чем говорят мои ошибки.

Заглянул в руководство, да. Потому что подвох заподозрил, решил посмотреть про числа с плавающей запятой. Заметь, не 0.1+0.7. Руководство было локальное, chm, но я больше привык линкам доверять, потому и полез на php.net искать.

Если фокус заключается в том, чтобы учить руководство наизусть, то мне таких фокусов не надо. Руководство на то и есть, чтобы им пользоваться.
Евгений Степанищев автор № 8
Согласен. Не к чему горячится. Я этими задачами опытом делюсь. Часть из них — то, на чём я обжёгся, часть — то, над чем задумался, часть — то, что случайно нашёл в руководстве в своё время.