Суббота, 30 Ноября 2024, 00:15

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
PHP - нюанс при работе с числами
JackNazaryanДата: Четверг, 02 Июля 2015, 22:43 | Сообщение # 1
старожил
Сейчас нет на сайте
Код
print (int)((0.1 + 0.7) * 10);


Вы думаете, что это выводит 8? Чёрта с два! Проверьте сами - на выходе получится 7. А если убрать (int), то всё встанет на место

Не знаете, почему так?..

p.s. Походу это с той же темы: 0.1 + 0.2 = 0.300000004, js
falcowareДата: Четверг, 02 Июля 2015, 23:26 | Сообщение # 2
старожил
Сейчас нет на сайте
JackNazaryan, мое предположение:
0.1+0.7 она считает 0.79999999994 (чертов ПХП!)
LunarPixelДата: Четверг, 02 Июля 2015, 23:59 | Сообщение # 3
старожил
Сейчас нет на сайте
JackNazaryan, тут, грубо говоря, дело в том, что числа машина, как известно, хранит в двоичной форме, а 0.1 и 0.7 нельзя представить в виде четкой двоичной дроби, они получаются бесконечными, что приводит к их "обрезанию", потому при преобразовании они теряют точность. Получается что-то типа 0.09999... + 0.69999... = 0.79999.... Потом умножаем на 10, а int отбрасывает дробную часть, что оставляет нас с 7-ой вместо 8-ки.
И дело тут совсем не в PHP, а в стандарте, который описывает представление чисел с плавающей точкой, который повсеместно используют.


JackNazaryanДата: Пятница, 03 Июля 2015, 00:36 | Сообщение # 4
старожил
Сейчас нет на сайте
LunarPixel, спасибо, самое логичное объяснение. Буду теперь внимательней с типами данных
falcoware, и сюда Вас черти занесли... sad
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг