json_encode小数点溢出引发的思考

博客讨论了在PHP中json_encode遇到的小数点溢出问题,指出浮点数精度有限,源于二进制无法精确表示某些十进制数。建议在代码层面通过函数运算或转换为字符串运算来解决精度问题,而非简单设置json_encode配置。同时,文章提到了bcMath系列函数在处理高精度数学运算时的作用。
摘要由CSDN通过智能技术生成

今天测试突然提了一个很奇怪的bug,某个接口返回值有好多位小数,小数点溢出? 

echo json_encode(0.1+0.7);
// 0.7999999999999999

json_encode 相关

然后试了下之后很神奇,然后就去查了下文档,发现了这

https://dev.tencent.com/u/lightWay/p/notebook/git/raw/master/imageHost/2019/07/3.png

 

大概是序列化浮点数值时候存储的有效位数的意思,这个值设置为-1就会舍去这些数字。

浮点型本身的问题

什么是浮点型

浮点型(也叫浮点数 float,双精度数 double 或实数 real)

浮点数的字长和平台相关,尽管通常最大值是 1.8e308 并具有 14 位十进制数字的精度(64 位 IEEE 格式)

浮点型精度

浮点数的精度有限。尽管取决于系统,PHP 通常使用 IEEE 754 双精度格式,则由于取整而导致的最大相对误差为 1.11e-16。非基本数学运算可能会给出更大误差,并且要考虑到进行复合运算时的误差传

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值