[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.
BOLK: Оттуда и есть :) А ты это всегда помнишь? :)
Этот конкретный пример — не всегда. :) На этот пример наткнулся случайно — когда смотрел про преобразования типов (для примера про «логический» тип). А то, что «10.0 times 0.1 is hardly ever 1.0.» (это из файла /usr/share/games/fortunes/fortunes ^_~) — это в любом приличном учебнике по программированию написано (если про плавающую точку там упоминается). На МК-61 даже «2 в степени 2» было 3.99999996 (число девяток не помню). :-)
За кого вы меня принимаете! Я еще ни разу не запускал эти примеры на PHP, о чем говорят мои ошибки.
Заглянул в руководство, да. Потому что подвох заподозрил, решил посмотреть про числа с плавающей запятой. Заметь, не 0.1+0.7. Руководство было локальное, chm, но я больше привык линкам доверять, потому и полез на php.net искать.
Если фокус заключается в том, чтобы учить руководство наизусть, то мне таких фокусов не надо. Руководство на то и есть, чтобы им пользоваться.
Согласен. Не к чему горячится. Я этими задачами опытом делюсь. Часть из них — то, на чём я обжёгся, часть — то, над чем задумался, часть — то, что случайно нашёл в руководстве в своё время.
Комментарии 12
[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
[Q]
Этот конкретный пример — не всегда. :)МК-61 даже «2 в степени 2» было 3.99999996 (число девяток не помню). :-)
На этот пример наткнулся случайно — когда смотрел
про преобразования типов (для примера про «логический» тип).
А то, что «10.0 times 0.1 is hardly ever 1.0.»
(это из файла /usr/share/games/fortunes/fortunes ^_~) —
это в любом приличном учебнике по программированию написано
(если про плавающую точку там упоминается).
На
Почему — см. по адресу http://ru.php.net/manual/en/language.types.float.php
Заглянул в руководство, да. Потому что подвох заподозрил, решил посмотреть про числа с плавающей запятой. Заметь, не 0.1+0.7. Руководство было локальное, chm, но я больше привык линкам доверять, потому и полез на php.net искать.
Если фокус заключается в том, чтобы учить руководство наизусть, то мне таких фокусов не надо. Руководство на то и есть, чтобы им пользоваться.
echo floor((0.1+0.7)*10); -> 07
echo floor((0.2+0.7)*10); -> 09
нелогично …