PHP - 使用json_decode

时间:2017-11-27 11:25:36

标签: php json floating-point

尝试使用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中被破坏了吗?

1 个答案:

答案 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作为输入。