关于浮点型误差的解决方法
Posted PHP交流群 178979370
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于浮点型误差的解决方法相关的知识,希望对你有一定的参考价值。
根据结果说明,作为浮点型数据,其精度已经损失了一部分,达不到完全精确。所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。
需要说明的是,这不是 php 的 问题,而是计算机内部处理浮点数的问题!在 C、JAVA 等语言中也会遇到同样的问题。
解决方法:需要将其控制在我们需要的精度范围内再行比较。
比如 bc 函数:
bcadd — 将两个高精度数字相加
bccomp — 比较两个高精度数字,返回-1, 0, 1
bcdiv — 将两个高精度数字相除
bcmod — 求高精度数字余数
bcmul — 将两个高精度数字相乘
bcpow — 求高精度数字乘方
bcpowmod — 求高精度数字乘方求模,数论里非常常用
bcscale — 配置默认小数点位数,相当于就是Linux bc中的”scale=”
bcsqrt — 求高精度数字平方根
bcsub — 将两个高精度数字相减
以上是关于关于浮点型误差的解决方法的主要内容,如果未能解决你的问题,请参考以下文章
正确生成浮点型的方法,解决sqlachemy Float浮点型的坑,生成float类型时,长度和精度均为0,导致查询不到结果!
43.关于浮点数的乘除法预算误差,一个看似没什么问题的解决方法