2013-11-30 3 views
1

Я должен отправить JSON:Php. Количество нулей в поплавке

{"val": 5000.00} 

Ни {"val": "5000.00"} ни {"val": 5000} является правильным форматом. json_encode() преобразует 5000,00 до 5000

Можно ли отправить формат правильный JSon в (два нуля) с json_encode из array("val" => (float) 5000.00)?

+0

Json предназначенный для передачи данных. Для передачи данных вам не нужны незначительные цифры в ваших номерах. Если вы хотите, чтобы они были представлены конечному пользователю, используйте, например, 'toFixed()' на стороне клиента перед показом. – GSerg

+0

Вам необходимо форматировать данные вручную после json_decode(), JSON будет обрабатывать формат данных для вас. – Fwolf

+0

Невозможно сделать с json_encode AFAIK. Используйте JSON для передачи данных, не используйте их для управления представлением данных пользователю. – Keilo

ответ

-1

Если вы действительно очень нужно сделать, что вы можете рассмотреть два варианта:

Опция факса. 1:

Вы создаете собственную колонну json. Если данные, которые вы должны кодировать, имеют простую структуру, и в будущем структура не может быть изменена, задача проста. У вас будет более медленный скрипт, так что еще одно требование состоит в том, что данные не слишком много.

Для одного объекта, как в примере вы публикуемый ...

$json = sprintf('{"val": %.2f}', $floatValue); 

Конечно для структурированных данных, как массив объектов, массивы массивов ... вы должны будете написать необходимые петли , место точно .,: [] {} " Надеюсь, что я дал вам идею ...

Вариант Н.Р. 2:.

вы сформируете данные, которые вы должны кодировать только как вы ш ould, если у вас не было странное требование, о котором вы просили. Но хранить значения плавания в строках, которые также будут содержать шаблон символов. Например, вы будете хранить 5000.00 как «## 5000.00 ##» Кодировать данные с помощью json_ecode. Permorm строка замены для устранения «## и ##»

$floatValue = 5000.00; 
$data = array("val" => sprintf("##%.2f##", $floatValue)); 
$json = json_encode($data); 
$json = str_replace('"##', '', $json); 
$json = str_replace('##"', '', $json); 

Выберите символы шаблона (## в примере) осторожно, чтобы избежать конфликтов с другими строками, которые могут содержать один и тот же шаблон elsewere в вас данных, чтобы быть закодирован.

+0

Благодарим вас за полезный совет! – MrBinWin

+0

Это не полезный совет, это очень много усилий для создания строки JSON, которая все равно не даст желаемых результатов. Даже если вы создаете строку '{" a ": 500.00}', она все равно будет анализироваться как '{a: 500}', потому что вы ** не можете добавить завершающие нули после десятичной запятой **. – meagar

+0

Bravo genius, но php - не единственный язык. – MrBinWin

4

Нет, это невозможно, потому что то, что вы считаете «правильными» и «неправильными» значениями, фактически является одним и тем же значением. Это чисто решение об отображении/скрытии конечных нулей.

Это зависит от вас во время отображения для отображения значения с правильным количеством знаков после запятой. Вы не можете указать номер числа с плавающей запятой, которое должно быть сохранено или перенесено с определенным количеством десятичных знаков.

+0

json_encode возвращает строку. Могу ли я настроить php для отображения этих нулей? – MrBinWin

+0

Если вы не хотите использовать один из «форматов», вы считаете недействительным ... '{" val ":" 5000.00 "}'. В противном случае float - это float, и вы никоим образом не можете налагать на него лишние нулевые нули. Это невозможно. Единственный раз, когда вы можете контролировать количество возвращаемых нулей «float», - это когда он был преобразован в строку для отображения пользователю. Вот почему я сказал, что вы не должны делать это в JSON. Вы должны добавить конечные нули позже, когда вы фактически показываете пользователю значение. – meagar

+0

preg_replace ('/: "(\ d + \. \ D +)", /', ': $ 1,', json_encode ($ a, JSON_FORCE_OBJECT)) – MrBinWin

-1
just preg_replace('/:"(\d+\.\d+)",/', ':$1,', json_encode($a, JSON_FORCE_OBJECT)) 
+0

Извините, но вы не знаете, что делаете. Возможно, вы успешно создали строку '{" a ": 500.00}', но она просто будет возвращена в '{a: 500}', когда вы JSON-декодируете ее. Ваше решение неверно, потому что вы все еще не понимаете проблему. Вы не можете добавить конечный ноль к поплавку. – meagar

+0

Проще говоря: 'JSON.parse ('{" a ": 500.00}')' => 'Object {a: 500}' – meagar

+0

Это совершенно неуместное поведение для Stack Overflow. – meagar

Смежные вопросы