计算机表示浮点数(float或double类型)都有一个精度限制,对于超出了精度限制的浮点数,计算机会把它们的精度之外的小数部分截断。因此,本来不相等的两个浮点数在计算机中可能就变成相等的了。例如:

float a=10.222222225,b=10.222222229

数学上a和b是不相等的,但是用“==”符号比较时是相等的。

用如下的代码进行校验:

 1 public class Test{
 2     public static void main(String[] args){
 3         isEqualOfFloat(10.222222225f, 10.222222229f);
 4     }
 5
 6     public static void isEqualOfFloat(float a, float b){
 7         System.out.println("-------使用“==”符号比较是否相等:" + (a==b));
 8         System.out.println("-------使用“Math.abs()”方法比较是否相等:" + (Math.abs(a-b)>0) );
 9         System.out.println("-------使用“Math.abs()”方法比较是否相等(比较宽容的限制):" + (Math.abs(a-b)<0.00000001) );
10         System.out.println("-------比较大小“<”:" + (a<b));
11         System.out.println("-------比较大小“>”:" + (a>b));
12     }
13 }

执行结果如下图:

因此一般不会直接用“==”或者“!=”对两个浮点数进行比较。判断两个浮点数是否相等可以根据他们的差的绝对值是否大于0来进行判断。

Math.abs(a-b)==0

考虑到实际应用,一般如果两个浮点数之差的绝对值小于或等于某一个可接受的误差(即精度,比如0.00000001即可),就认为它们是相等的。

Math.abs(a-b)<0.00000001

转载于:https://www.cnblogs.com/amunote/articles/float%e5%88%a4%e6%96%ad%e6%98%af%e5%90%a6%e7%9b%b8%e7%ad%89.html

Java float型数据判断是否相等相关推荐

  1. Java字节序,java整型数与网络字节序 byte[] 数组转换关系(ByteArrayOutputStream用法)

    Java字节序 http://origin100.iteye.com/blog/267165 /** * 通信格式转换 * * Java和一些windows编程语言如c.c++.delphi所写的网络 ...

  2. Java字节序,java整型数与网络字节序 byte[] 数组转换关系

    Java字节序 http://origin100.iteye.com/blog/267165 /** * 通信格式转换 * * Java和一些windows编程语言如c.c++.delphi所写的网络 ...

  3. java byte(字节_Java字节序,java整型数与网络字节序 byte[] 数组转换关系(ByteArrayOutpu......

    /** * 通信格式转换 * * Java和一些windows编程语言如c.c++.delphi所写的网络程序进行通讯时,需要进行相应的转换 * 高.低字节之间的转换 * windows的字节序为低字 ...

  4. 将float型数据转化成int型

    在将float型数据转化成int数据前,首先我们要了解float型数据在内存中的存储方式,float类型在内存中占4个字节32个比特位,如下:   0 00000000 000000000000000 ...

  5. java float 加法_Java-杂项:Float 加减精度问题

    java float 加减精度问题 在取这个字段的时候转换成BigDecimal就可以了 同时,BigDecimal是可以设置精度的. float m = 12.22F; float c = 1.22 ...

  6. java虚拟机如何判断两个类相同_你有没有想过: Java 虚拟机是如何判断两个对象是否相同的?判断的流程是什么?...

    在Java程序运行时,会产生那么多的对象,那 Java 虚拟机是如何判断两个对象是否相同的呢?判断的流程是什么? 参考解答: Java 虚拟机会先判断两个对象的hashCode是否相同,如果hashC ...

  7. 网络编程中使用float型数据要注意

    2019独角兽企业重金招聘Python工程师标准>>> 在网络编程中使用float型数据要特别注意,因为各个机器对浮点数的表示极有可能会不一样,比如在gsoap中,当在客户机和服务器 ...

  8. 串口 接收端_嵌入式系统串口传输int float型数据的处理

    在做嵌入式系统通信时往往会用到串口,包括嵌入式系统将数据传输给PC,或者是嵌入式系统之间进行数据传输,这时候就会遇到发送数据的问题. 我们知道单片机通过串口发送数据时往往是一次一个字节(8位),如果传 ...

  9. 【Java】奇偶数判断

    [Java]奇偶数判断 需求 编写方法,判断一个数是奇数还是偶数 代码 package com.cxl.demo27;import java.util.Scanner;//奇偶数判断 public c ...

最新文章

  1. 独家 | 可预测COVID-19病例峰值的新算法
  2. 训练数据集如何划分验证测试集?train/test(val/dev) set和交叉验证(cross validation)
  3. linux usb初始化
  4. 无密码身份验证:安全、简单且部署快速
  5. 面向对象三大特性 -- 继承,封装,多态
  6. 剑指Offer10- II. 青蛙跳台阶问题
  7. axure html 360安装扩展,小编搞定win7系统360浏览器添加Axure扩展的设置方案
  8. hbase sqoop 实验_SQOOP安装及使用-实验
  9. word转pdf出现空白页||去除PDF中的指定页
  10. Android TV 开发 (1)
  11. CSV Converter Pro for Mac(CSV数据转换工具)
  12. WinRAR 去除广告
  13. ddr4单颗粒最大_国产内存来了:长鑫发布DDR4/LPDDR4X内存
  14. 《视觉SLAM十四讲-第二版-ch8,OpenCV4报错及解决》
  15. 浏览器图标及名称大全_估计真要卸载谷歌浏览器了!自带黑科技浏览器推荐(下)...
  16. 详解线上线下收单业务(2)
  17. 关于MATLAB直方图的绘制及应用
  18. Java Rasp技术浅析
  19. 毕业设计--20200301--domoticz的智能家居设备---esp8266(micropython)+MQTT 做一个可控开关
  20. 基于OpenStack的云计算平台搭建

热门文章

  1. idea使用过程中的坑
  2. 学习Kubernetes 和容器技术体系的最佳方法
  3. 计算机基础教程2 - 计算机发展历程
  4. PHP面向对象重要知识点----------第一部分
  5. Linux下ping命令、traceroute命令、tracert命令的使用
  6. JAVA将Excel中的报表导出为图片格式(三)换一种实现
  7. 40岁,将站到哪里(转)
  8. hadoop JOB的性能优化实践
  9. Linux 命令(132)—— groupadd 命令
  10. C++ 代码调试建议