浮点数精度问题 
                                                    
                        
                    
                    
  
                    
                    今天在写接口时,发现响应结果的浮点数特别长。
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
              
                    
                    
                    
 
推荐文章: