论坛首页 编程语言技术论坛

长正整数被格式化成科学记数法精度丢失

浏览 2284 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2014-06-25   最后修改:2014-06-25
PHP
最近调淘宝一个接口(获取图片分类)经过json_decode后返回(分类)id编号时,返回的是科学记数法

14602127435982492(17位长度)
例:json_decode(json_encode(14602127435982492)); 返回数据为:1.4602127435982E+16
我用number_format(1.4602127435982E+16, 0, '', '');转回去得到结果:14602127435982000


然后再调另一个接口,怎么也调不通,后来写了Java程序,调接口返回的数据是正常的。
所以我觉的是淘宝那边的问题,后来提交Bug上去,得到回复是PHP浮点精度的问题,在php.ini中配置修改一下就好了。

我敢紧查看了一下。确实如此。

; The number of significant digits displayed in floating point numbers.
; http://php.net/precision
precision = 14
;浮点型数据显示的有效位数


我将precision修改为17,重启服务器。则返回正常数据(precision值大于17位返回的结果是一样的)


扩展阅读:
precision = 17 参数为:11999999999999999(17位长度)
json_decode(json_encode(11999999999999999))
结果为:12000000000000000

论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics