PHP使用json_encode正确的处理浮点数负零的情况
例如这段代码:
1 2 3 4 5 6 7 8
| <?php
$array = [-0.0, 0.0]; var_dump($array); $json = json_encode($array); var_dump($json); $array = json_decode($json); var_dump($array);
|
执行结果如下:
1 2 3 4 5 6 7 8 9 10 11 12 13
| array(2) { [0]=> float(-0) [1]=> float(0) } string(6) "[-0,0]" array(2) { [0]=> int(0) [1]=> int(0) }
|
我们发现,先json_encode
再json_decode
是不能够还原的。而且value
也从float
变成了int
。这是因为我们在json_encode
没有去保留ZERO FRACTION
。所以,正确的做法应该是这样的:
1 2 3 4 5 6 7 8
| <?php
$array = [-0.0, 0.0]; var_dump($array); $json = json_encode($array, JSON_PRESERVE_ZERO_FRACTION); var_dump($json); $array = json_decode($json); var_dump($array);
|
执行结果如下:
1 2 3 4 5 6 7 8 9 10 11 12 13
| array(2) { [0]=> float(-0) [1]=> float(0) } string(10) "[-0.0,0.0]" array(2) { [0]=> float(-0) [1]=> float(0) }
|
我们在encode
的时候加上JSON_PRESERVE_ZERO_FRACTION
,就会让得到的json
字符串保留浮点数的.0
,这样在decode
的时候,就可以顺利的还原了。