2016-12-23 4 views
2

配列をjsonに変換し、データの精度と型を保持する必要があります。json_encodeはそのままfloat値を保持します

$a = array("num" => 10000.00); 
    print_r(json_encode($a)); 

上記の例では、10000.00が10000に変換されています。jsonのすべてをどのように保持できますか。

+0

文字列 – Beginner

答えて

3

php5.6以降でできることは、floatとしてエンコードされていることを確認することです。しかし、それは精度を維持することはありません:

<?php 
$a = array("num" => 10000.00); 
print_r(json_encode($a, JSON_PRESERVE_ZERO_FRACTION)); 

データ型精度が重要な場合は、例えば、追加のパラメータを送信する必要があります:

$a = ["num" => [ 
     "value" => 10000.0, 
     "precision" => 2 
    ] 
]; 
print_r(json_encode($a, JSON_PRESERVE_ZERO_FRACTION)); 

あなたは常に精度が必要な場合(貨幣価値のような)2桁の値の場合、丸めの問題を避けるために値を100倍して整数として格納する必要があります。 PHP - Floating Number Precisionも参照してください。

+0

にそれを変換せずに小数を保持方法は、それは不可能その場合には精度を保つためには存在しないのですか? – Harshit

+0

@Harshit指定しない限り(自分の編集を参照)、精度はPHPには分かりません。 – jeroen

+0

@jereon実際には、小数点以下2桁の精度を持つ浮動小数点しか受け付けない支払いAPIのために必要です。 – Harshit

0

あなたの所望の出力を得るために、以下のコードセグメントを使用することができます -

$a = array("num" => 10000.00); 
foreach ($a as $i => $number) 
{ 
    $a[$i] = number_format($number, 2, '.', null); 
} 

    echo $res = json_encode($a); 
+1

これは文字列に値を単にキャストするためのコードがたくさんあります;-) – jeroen

+0

文字列を出力します。 – Harshit

関連する問題