优秀的编程知识分享平台

网站首页 > 技术文章 正文

php7.1 使用json_encode 精度丢失问题

nanyue 2024-11-11 12:27:47 技术文章 1 ℃

以前写代码感觉加法不会出现加法丢失精度问题

$data['balance']=0.09;

$data['intransitba']=0.01;

$data['totalbalance']=$data['balance']+$data['intransitba'];

打印出来

Array ( [balance] => 0.09 [intransitba] => 0.01 [totalbalance] => 0.1 )

{"balance":0.09,"intransitba":0.01,"totalbalance":0.09999999999999999}

json_encode 后数据就会出现精度问题

找下原因

首先分析

1、因为服务器有两个php版本,再老的版本上同样的代码是可以的

所以怀疑和php版本高了有关系

找原因

PHP 7.1.x在编码双精度值时开始使用代替精度。因为从精度到serialize_precision用法的变化。

PHP7.1后php.ini里的serialize_precision默认为17,低于15就会避免问题发生。

解决办法:

1、ini_set('serialize_precision', 14);

ini_set('precision', 14);

2、使用round 规范返回精度round( $data['intransitba']+$data['balance'], 2 );

最近发表
标签列表