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的时候,就可以顺利的还原了。