Как настроить json_encode?

Некорректно экспортируются данные в json. Переменная хранит массив с float-числами. var_dump выводит следующее:
2823 => 
    array (size=3)
      'o' => int 3
      'p' => string '58.9' (length=4)
      'b' => float 6.6
  2824 => 
    array (size=3)
      'o' => int 3
      'p' => string '57.1' (length=4)
      'b' => float 6.4

Это верно и при экспорте в json я ожидаю такие же значения. Но echo json_encode($var) выводит следующее:
"2823":{"o":3,"p":"58.9","b":6.600000000000001},"2824":{"o":3,"p":"57.1","b":6.4}


Видно, что элемент b в первом случае конвертируется не правильно, хотя во втором случае корректно. Это только 2 элемента из всего массива, но в большинстве случаев конвертируется именно криво.

Я понимаю, что если эту же строку с json запихнуть обратно в json_decode, то всё будет нормаль, но я строку с json печатаю в скрытый div и потом парсю с помощью
$.parseJSON($('#forang').text())
и в переменной получаю
2823:Object
      b:6.600000000000001
      o:3
      p:"58.9"
2824:Object
      b:6.4
      o:3
      p:"57.1"


--
Ещё заметила такой момент: если сделать просто echo json_encode(['a'=>6.6]);, то получается верно {"a":6.6}
--
Суть вопроса - почему так происходит и как сделать так, чтобы конвертировалось всегда правильно и с таким количеством символов после запятой, сколько было в переменной.
  • Вопрос задан
  • 1238 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Skit25
на всё воля Бога
Посмотрите констаны php.net/manual/ru/json.constants.php
Вот например: Гарантирует, что значение типа float будет преобразовано именно в значение типа float...
json_encode($a, JSON_PRESERVE_ZERO_FRACTION)
Либо кодировать base64 перед json, хотя думаю есть константа, которая либо как строку все будет передавать, либо скажет json_encode не совать нос не в свое дело.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы