浮点数精度问题
今天在写接口时,发现响应结果的浮点数特别长。
laravel
框架示例如下:
Route::get('round', function () {
$result['round'] = round(11.3/3, 3);
return response()->json($result);
});
响应结果如下:
{
"round": 3.766999999999999904076730672386474907398223876953125
}
后来,发现是 php.ini
文件中选项 serialize_precision
的问题。
我的配置是:serialize_precision = 100
,将其改成 serialize_precision = -1
完美解决。
也可以使用 php
的 ini_set
函数来解决。
示例代码:
Route::get('round', function () {
ini_set('serialize_precision', -1);
$result['round'] = round(11.3/3, 3);
return response()->json($result);
});
再次测试结果如下:
{
"round": 3.767
}
官方说明:serialize_precision
:序列化浮点数时存储的有效数字的位数。-1
表示将使用增强算法来四舍五入此类数字。
最后,还是建议用字符串返回浮点数。
具体选项说明参考官方文档:www.php.net/manual/zh/ini.core.php...
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: