Laravel5.5 JSON 响应出现浮点小数溢出问题

环境:php7.1+laravel5.5

现象描述:在进行接口输出,因为使用了JSON 响应

return response()->json()

出现了浮点数

10.629999999999997

的问题

1,查看了laravel文档

json 方法会自动把 Content-Type 响应头信息设置为 application/json,并使用 PHP 函数 json_encode 将给定的数组转换为 JSON:

return response()->json([
    'name' => 'Abigail',
    'state' => 'CA'
]);

表示通过json_encode将数组转为json,所以问题出现在json_encode上面

2,经过网上查询得知
该现象只出现在PHP 7.1+版本上
PHP RFC:更精确的浮点值处理

网上说可以通过调整 php.ini 中 serialize_precision (序列化精度) 的大小来解决这个问题。

默认值 serialize_precision = -1

; When floats & doubles are serialized store serialize_precision significant
; digits after the floating point. The default value ensures that when floats
; are decoded with unserialize, the data will remain the same.
; The value is also used for json_encode when encoding double values.
; If -1 is used, then dtoa mode 0 is used which automatically select the best
; precision.
serialize_precision = 17

按照说明,将这个值改为 小于 17 的数字就解决了这个问题,最后一直往小调,我14的时候就没有问题了

这里参照了

本作品采用《CC 协议》,转载必须注明作者和本文链接
vance
vance
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!