浮点数精度问题
今天在写接口时,发现响应结果的浮点数特别长。
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 协议》,转载必须注明作者和本文链接
关于 LearnKu
推荐文章: