Задать вопрос
Slash-Zn
@Slash-Zn

Почему подключённый файл (include) возвращает лишние цифры?

Здравствуйте.
Есть файлы.php, в которых, кроме одного многомерно массива больше ни чего нет. Данные файлы подключаются к сценарию, при помощи "include". Проблема в том, что в массиве, например, есть такой элемент:
'capacity' => 0.2,
После инклуда, элемент выглядит так:
'capacity' => 0.20000000000000001,
С целыми числами такого нет, выводится, как есть.
include ('...');

		return $val;

Почему такое может происходить? И как можно исправить, чтобы приходило так, как написано в массиве?
Спасибо.
  • Вопрос задан
  • 50 просмотров
Подписаться 1 Простой 3 комментария
Решения вопроса 2
VoidVolker
@VoidVolker
Dark side eye. А у нас печеньки! А у вас?
Потому что у вас числа с плавающей запятой.
Ответ написан
Комментировать
@rPman
Тебе исчерпывающе ответили о причинах, такова природа десятичных чисел, которые хранятся в битах.

Если тебе нужно работать с числами в той форме что сохранена - либо используй строки.
'capacity' => "0.2",
либо используй целочисленный формат с фиксированной степенью (где то ты должен определить предел точности, сколько знаков после запятой, которые тебя интересуют, и делай на это соответствующую скидку при операциях умножения и деления).
'capacity' => 2000,
В данном случае речь о 4 значимых цифрах или 10^4
при умножении, результат нужно делить на 10^4 и отбрасывать все что после запятой через intVal или round (а перед делением наоборот первый операнд умножать)

Внимание, на php int, при превышении PHP_INT_MAX будет автоматически сконвертировано в float, поэтому даже с этим методом придется хранить числа в строках и использовать bc math или рекомендуют gmp как самую быструю реализацию
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы