json — PHP: как автоматически предотвратить округление числа json_encode?

Имея большую проблему с 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: НЕ СТРУНА 🙂

2

Решение

Похоже, вы ищете JSON_PRESERVE_ZERO_FRACTION, доступно в PHP 5.6.6. В предыдущих версиях вам нужно либо преобразовать в строку, либо смириться с этим и признать, что числа с плавающей запятой и целые числа эквивалентны, когда нет дробного значения.

$numbers = [1.00,2.00];

echo $res = json_encode($numbers,JSON_PRESERVE_ZERO_FRACTION);
4

Другие решения

$numbers = [1.00,2.00];

Здесь ваши числа уже потеряли свои «десятичные значения». Серьезно, попробуйте var_dump на них сразу после этой строки вы не получите .00 от этого тоже.

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

Если вы хотите сохранить форматирование, вам нужно использовать строки до конца.

1

Вы можете использовать свой код следующим образом:

<?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], который совпадает.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector