За последние 24 часа нас посетили 16186 программистов и 1553 робота. Сейчас ищут 936 программистов ...

Почему = 7?

Тема в разделе "PHP для новичков", создана пользователем troelsenon, 29 окт 2018.

  1. troelsenon

    troelsenon Активный пользователь

    С нами с:
    13 ноя 2015
    Сообщения:
    19
    Симпатии:
    2
    Доброго времени суток.
    Поясните, пожалуйста, почему
    Код (Text):
    1. print (int)((0.1 + 0.7) * 10);
    , данный код выводит 7?
    Если удалить int получается 8.
    Заранее благодарен.
     
  2. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    (int) в PHP выполняет операцию cast(signed longint) - то есть, по сути, отбрасывает дробную часть.
    (0.1 + 0.7)*10 может быть представлено как что-то наподобие 8 + 1E-N (выглядит как 8.00..01) или 8 - 1E-N (выглядит как 7.99..99), где N - точность представления стандартного вещественного типа данных - double по умолчанию, для PHP его точность составляет 1E-14. Это означает, что при выводе числа как вещественного (0.1+0.7)*10 будет распознаваться как 8, но при отбрасывании дробной части, в случае, если эта сумма была представлена как 7.99...99, на выходе получится 7
    --- Добавлено ---
    https://php.ru/manual/language.types.float.html#warn.float-precision
     
    Deonis нравится это.
  3. troelsenon

    troelsenon Активный пользователь

    С нами с:
    13 ноя 2015
    Сообщения:
    19
    Симпатии:
    2
    Спасибо, за ответ!
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям