json_encode中小浮点数的表示

时间:2017-04-26 10:32:39

标签: php json floating-point precision

我在PHP脚本中执行以下代码:

$obj = new \stdClass();
$obj->lat = 0.000011399388312455;
echo json_encode($obj) . "\n";

脚本的输出是

{"lat":1.1399388312454999446e-5}

如您所见,数字以指数表示法表示。 是否有某种方法可以在JSON序列化对象中以扩展符号表示该特定数字?

所需的输出是

{"lat":0.000011399388312455}

PHP的版本是5.6.30。

P.S。:此JSON序列化对象将被发送到不接受指数形式的数字的外部Web服务。此外,它需要是一个数字而不是一个字符串({"lat":"0.000011399388312455"}不会工作)。

不应舍入数字(它是地理坐标)。

以下是其他类似的问题,但不幸的是,它们不适合我的情况。

php- floating point number shown in exponential form

Remove the "E" in a number format for very small numbers

提前谢谢。

1 个答案:

答案 0 :(得分:3)

它在PHP 7.1 https://wiki.php.net/rfc/precise_float_value中实现 解决方法是,使用其他JSON序列化器而不是默认的json_encode

E表示法是有效的float表示形式。在php> 7.1且精度设置为-1的情况下,您的代码结果如下所示:{"lat":1.1399388312455e-5}0.000011399388312455完全相同,因为您有4个前导零。

如果您仍然想在json中使用前导零,则可以使用字符串。它们非常适合坐标表示。