网站首页 > 技术文章 正文
以前写代码感觉加法不会出现加法丢失精度问题
$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 );
猜你喜欢
- 2024-11-11 php+json+mysql实现前后端分离(php vue前后端分离)
- 2024-11-11 PHP中json解析失败原因, json_decode返回null解析失败原因
- 2024-11-11 如何使php的数组传递到js中(如何使php的数组传递到js中)
- 2024-11-11 Python操作JSON格式数据的技巧(python解析json数据)
- 2024-11-11 Linux(centos)用yum方式安装php最新版
- 2024-11-11 PHP 8.3 正式发布!(php8.0新功能)
- 2024-11-11 使用json_encode打印中文字符并且格式化(php代码)
- 2024-11-11 PhpStorm 2022.2 已发布(phpstorm2018)
- 2024-11-11 你不知道的PHP 8.3版本和它的一些有趣的变化
- 2024-11-11 通过WordPress HTTP API 获取json内容并解析
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)