PHP函数serialize_precision (integer)
适用范围:PHP_INI_ALL;默认值:100
serialize_precision指令的数量决定了被序列化后的浮点数字存储。设置到一个合适的值,确保精度的数字时,可能丢失以后反序列化。
我设置如下:ini_set('serialize_precision', 16),结果:
网上有网友说使用默认值-1是绝对错误的!!!
这是官方文档例子
<?php
$v = 10.00000000000001;
ini_set('precision', 14);
ini_set('serialize_precision', 17);
var_dump($v);
echo var_export($v, true), PHP_EOL;
ini_set('serialize_precision', 14);
echo json_encode($v), PHP_EOL;
ini_set('serialize_precision', 17);
echo $v, PHP_EOL;
?>
float(10)
10.000000000000011
10
10
另外解决办法:
解决方法 方法1:强行转换成字符串保证精度
request['param']['feeAmount']=(string)request['param']['feeAmount'];
注意:使用这种方法千万要注意,对接接口是否有变量类型要求
方法2:格式化数字number_format函数
number_format(number,decimals,decimalpoint,separator)
参数:
number参数是要格式化的数据 decimals参数是保留的小数 decimalpoint参数是规定用作小数点的字符串 separator参数是规定用作千位分隔符的字符串