新项目用的 php 7.1.13 版本,在使用过程中发现 浮点类型 数据经过 json_encode 之后会出现精度问题。
举个例子:
$data = [
'stock' => '100',
'amount' => 10,
'price' => 0.1
];
var_dump($data);
echo json_encode($data);
输出结果:
array(3) {
["stock"]=> string(3) "100"
["amount"]=> int(10)
["price"]=> float(0.1)
}
{
"stock":"100",
"amount":10,
"price":0.10000000000000001
}
解决方法:
一、修改配置
ini_set('serialize_precision', 14);
ini_set('precision', 14);
https://my.oschina.net/shunshun/blog/4513260
二、使用bcmath扩展处理浮点数加减
$a = "0.1";
$b = "0.1";
$c = bcadd($a, $b, 2);
$a = "1";
$b = "0.1";
$c = bcadd($a, $b, 2);
var_dump(floatval($c));
https://www.php.net/manual/zh/function.bcadd.php
来自anson博客