在json_encode中表示小浮点数的方法

3

我在一个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序列化对象将会被发送到一个不接受指数形式数字的外部网络服务。此外,它需要是数字而不是字符串({"lat":"0.000011399388312455"}将无法工作)。

这个数字不应该四舍五入(它是地理坐标)。

这里有其他类似的问题,但不幸的是它们不适用于我的情况。

php-浮点数以指数形式显示

删除非常小的数字格式中的"E"

提前感谢你。

1个回答

3

该技术采用PHP 7.1实现。参考链接:https://wiki.php.net/rfc/precise_float_value。 作为一种解决方法,可以使用其他JSON序列化程序而不是默认的json_encode

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

如果您仍希望在JSON中保留前导零,则可以选择字符串。它们非常适合坐标表示。


不幸的是,无法将字符串替换为数字。我正在与外部Web服务进行交互,该服务可以进行输入验证,并将请求正文标记为无效。但是,对于给定的数字,我同意您提出的两种表示方式是等价的。PHP中新实现的选项(由您提供的precisionserialize_precision)无法解决这个问题。 - Marco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接