位置: 编程技术 - 正文

php 浮点数比较方法详解(php浮点数四舍五入)

发布时间:2024-01-10

推荐整理分享php 浮点数比较方法详解(php浮点数四舍五入),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:php浮点数比较大小,php浮点数比较,php浮点数运算精度问题,php浮点数计算解决方法,php浮点型的比大小,php浮点数运算精度问题,php浮点数比较,php浮点型的比大小,内容如对您有帮助,希望把文章链接给更多的朋友!

浮点数运算精度问题

首先看一个例子:

$a+$b==$c 返回true,正确 $c-$b==$a 返回false,错误

为什么会这样呢?

运算后,精度为位时实际返回的内容如下:

$c-$b 为 0.,因此与0.1比较返回false

出现这个问题是因为浮点数计算涉及精度,当浮点数转为二进制时有可能会造成精度丢失。

浮点数转二进制方法

整数部分采用除以2取余方法

小数部分采用乘以2取整方法

例如:把数字8.5转为二进制

整数部分是8

8/2=4 8%2=0 4/2=2 4%2=0 2/2=1 2%2=0

1比2小,因此不需要计算下去,整数8的二进制为

小数部分是0.5

0.5x2 = 1.0

因取整后小数部分为0,因此不需要再计算下去

小数0.5的二进制为 0.1

8.5的二进制为.1

php 浮点数比较方法详解(php浮点数四舍五入)

计算数字0.9的二进制

0.9x2=1.8 0.8x2=1.6 0.6x2=1.2 0.2x2=0.4 0.4x2=0.8 0.8x2=1.6

…. 之后不断循环下去,当截取精度为N时,N后的数会被舍去,导致精度丢失。

上例中0.9在转为二进制时精度丢失,导致比较时出现错误。

所以永远不要相信浮点数已精确到最后一位,也永远不要比较两个浮点数是否相等。

正确比较浮点数的方法

1.使用round方法处理后再比较

例子:

2.使用高精度运算方法

首先进行运算时,使用高精度的运算方法,这样可以保证精度不丢失。

高精度运算的方法如下:

bcadd 将两个高精度数字相加

bccomp 比较两个高精度数字,返回-1,0,1

bcdiv 将两个高精度数字相除

bcmod 求高精度数字余数

bcmul 将两个高精度数字相乘

bcpow 求高精度数字乘方

bcpowmod 求高精度数字乘方求模

bcscale 配置默认小数点位数,相当于Linux bc中的”scale=”

bcsqrt 求高精度数字平方根

bcsub 将两个高精度数字相减

例子:

标签: php浮点数四舍五入

本文链接地址:https://www.jiuchutong.com/biancheng/290928.html 转载请保留说明!

上一篇:PHP删除二维数组中相同元素及数组重复值的方法示例(php如何删除数组元素)

下一篇:PHP curl 或 file_get_contents 获取需要授权页面的方法

  • 个人出租房屋的个人所得税税率
  • 增值税审核表
  • 主营业务成本大于生产成本
  • 购买性支出和转移性支出财政职能发挥方面有何不同
  • 公司房租只有房租租赁协议无发票怎么入账
  • 普通发票没有明细可以吗
  • 货物运输代理费用会计分录
  • 商业保险费可以在个人所得税税前扣除吗
  • 企业出租自有厂房超经营吗
  • 投资收益涉及税种
  • 金税三期理解
  • 营改增后建筑行业税率
  • 企业注销时留抵税额怎么做账
  • 退役士兵创业就业政策
  • 社保不报的情况下保险报销吗
  • 回迁安置房税收优惠
  • 一次性收取一年服务费怎么确定收入
  • 部队医院学校都没有税号吗
  • 委托加工应税消费品收回后直接销售
  • 企业注销个税怎样更正申报呢
  • linux dns配置服务器
  • win11卓越性能模式
  • 发放福利视同销售进项税要转出吗?
  • led显示屏的销售话术
  • 付佣金怎么做分录
  • 管理费用部分科目怎么填
  • 鸿蒙系统怎么关闭负一屏
  • php数组函数面试题
  • 收到投资方投入原材料
  • php后端开发流程教程
  • PHP:is_uploaded_file()的用法_Filesystem函数
  • echarts右侧y轴
  • php ajax json
  • 集群怎么写
  • php autoload用法
  • 一天撸一个财务APP系统【安卓端+前端+后端】
  • JavaScript ,18种常用数组方法,快来看看你会吗?
  • 高德地图的2种导航方式
  • 微软官方wintogo
  • 收到银联代收短信
  • python send_from_directory
  • 银行对账单可以作为原始凭证入账吗
  • 一般纳税人在任何情形下都可以领购使用增值税专用发票
  • 印花税申报怎么填
  • 应交税费余额是什么意思
  • 押金退还需要多久
  • 生产企业出口退税政策
  • 财务费用手续费借贷方向
  • 银行的手续费开票怎么开
  • 税务局退还的三险是什么
  • 什么是成本费用,什么是经营成本
  • 利润表增加,资产负债表减少怎么回事
  • SSB(SQLservice Service Broker) 入门实例介绍
  • mysql 树状查询语句
  • win10小娜如何使用
  • ipv6文件
  • 移动u盘的作用
  • win10 1607更新失败
  • centos yum 命令
  • windows8怎么设置开机密码
  • keyemain.exe是什么
  • win8.1应用商店无法打开
  • win8系统安装条件
  • /usr/bin/install: 无法创建一般文件‘/usr/local/man/man1/cjpeg.1’: 没有那个文件
  • win8系统自带浏览器
  • shell脚本中的数组
  • number fields to_char
  • linux jdk
  • 纸嫁衣6攻略全文图解
  • html+css网站设计基础教程
  • android开发基础知识
  • 不要用强制方法杀掉python线程
  • JavaScript程序设计形考任务第一次任务
  • 学费报销找学校哪个部门
  • 皇家税务与海关署
  • 2020年砂石
  • 银行收取手续费可以抵扣进项税额吗
  • 公积金上个月没交
  • 税务稽查工作底稿属于什么证据
  • 农转非和非农
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号