尝试使用PHP 7.0.21中的json_decode函数解码JSON时遇到问题。我能用这些代码行复制这个问题:
代码:
<?php
$inputJSON = '{"value":0.00000883}';
$outputJSON = json_decode($inputJSON);
print_r($outputJSON);
输出:
stdClass Object
(
[value] => 8.83E-6
)
我也尝试用ini_set('precision', 8);
更改精度,这不会改变输出。
我在网上找到的唯一修复是正则表达式替换,将数字更改为字符串,但这是一个黑客和一个很好的解决方案。我不想将所有浮点数更改为字符串。
为什么会发生这种情况?如何在不增加大量开销的情况下正确修复此问题,例如使用number_format
。解析只是在json_decode中被破坏了吗?
答案 0 :(得分:2)
您可以使用number_format删除e-6
,以便在数据库中正确存储;
<?php
$inputJSON = '{"value":0.00000883}';
$outputJSON = json_decode($inputJSON);
$formatted = number_format($outputJSON->value,8);
print_r($formatted);
输出:0.00000883
虽然,我非常确定MySQL应该处理8.83E-6
作为输入。