Имея большую проблему с json_encode, он автоматически округляет цифры, но мне нужно 2 десятичных знака на каждую цифру.
PHP:
<?php
$numbers = [1.00,2.00];
foreach ($numbers as $i => $number)
{
$numbers[$i] = number_format($number, 2, '.', null);
}
echo json_encode($numbers, JSON_NUMERIC_CHECK);
?>
ВЫХОД:
[1,2]
ОЖИДАЕМЫЙ ВЫХОД:
[1.00,2.00]
Как я могу предотвратить каждую цифру для автоматического не округления?
PS: НЕ СТРУНА 🙂
Похоже, вы ищете JSON_PRESERVE_ZERO_FRACTION
, доступно в PHP 5.6.6. В предыдущих версиях вам нужно либо преобразовать в строку, либо смириться с этим и признать, что числа с плавающей запятой и целые числа эквивалентны, когда нет дробного значения.
$numbers = [1.00,2.00];
echo $res = json_encode($numbers,JSON_PRESERVE_ZERO_FRACTION);
$numbers = [1.00,2.00];
Здесь ваши числа уже потеряли свои «десятичные значения». Серьезно, попробуйте var_dump
на них сразу после этой строки вы не получите .00
от этого тоже.
Числа с плавающей точкой и целые числа содержат только числовое значение, форматирование никак не сохраняется. Это не json_encode
проблема, это фундаментальная истина числовых значений в вычислениях.
Если вы хотите сохранить форматирование, вам нужно использовать строки до конца.
Вы можете использовать свой код следующим образом:
<?php
$numbers = [1.00,2.00];
foreach ($numbers as $i => $number)
{
$numbers[$i] = number_format($number, 2, '.', null);
}
echo $res = json_encode($numbers); // ["1.00","2.00"]
echo str_replace('"', '', $res); //[1.00,2.00]
?>
и ваш ожидаемый результат: [1.00,2.00], который совпадает.