具体代码:
<?php
$data = [
'title'=>'狼道',
'num' => '1',
'price' => 56.98,
];
echo json_encode(self::fix_number_precision($data), JSON_UNESCAPED_UNICODE);
exit;
//输出:{"title":"狼道","num":"1","price":"56.98"}
1、浮点类型数据出现精度问题
解决方案:构造fix_number_precision方法
2、中文字符串转码问题
解决方案:参数JSON_UNESCAPED_UNICODE
<?php
/**
* @param $data
* @param int $precision
* @return array|string
* 解决PHP版本7.0+及其以上json_encode函数造成浮点类型数据出现精度问题
*/
private static function fix_number_precision($data, $precision=2)
{
if(is_array($data)){
foreach ($data as $key => $value) {
$data[$key] = self::fix_number_precision($value, $precision);
}
return $data;
}
if(is_numeric($data)){
$precision = is_float($data) ? $precision : 0;
return number_format($data, $precision, '.', '');
}
return $data;
}
?>