原文链接:

double类型(浮点数)是否相等的判断方法_haikuotiankongdong的博客-CSDN博客_double比较是否相等

·

举个例子:

double a1 = 2.11;
double a2 = 2.10;
double a3 = a1 - a2;double b1 = 7.98;
double b2 = 7.97;
double b3 = b1 - b2;System.out.println(a3 == b3);

乍一看,觉得肯定是true啊,都是0.01,其实不是,结果是false;

因为无论我们使用哪种编程语言,在哪种编译环境下工作,都要先把源代码翻译成二进制的机器码才能被计算机所识别。

举个简单的例子,在源程序里面2.4,是十进制的,但计算机不能直接识别,要先编译成二进制。

那么问题来了,2.4的二进制并非是精确的2.4,反而是最为接近的二进制表示是2.39999999999999999999。

打印出来a3和b3看看:

可以看到,这两个double类型的变量,即使看起来觉得是相等的,但是其实并不是的,因为double浮点数存在精度问题,它所表示的是一个精度区间。

这两个double类型的变量表示的只是0.01上下的一个精度区间内的一个数字。

要真正理解,在Java中,float和double都是浮点数,是二进制数值表示的,就可能出现精度缺失问题。所以处理float和double类型数值时,必须注意精度问题

`

结论:

double类型的两个数可以使用<、>,但是不能直接用==、>=、<=比较大小,

因为double类型的表示往往是不精确的(近似表示),double浮点数存在精度问题,它是属于有精度范围的那种,不够精确。

所以,

double类型的两个数可以使用<、>,因为比较大于小于,跟精度范围没有关联;

但是不能直接用==、>=、<=比较大小,因为会涉及到具体的精度。

·

拓展:

①,关于double和float类型的加减乘除必须使用BigDecimal。

②,要多去更加理解计算机中浮点数二进制表示会导致精度问题。详情参见:double类型精度丢失问题,以及解决方法_Morning sunshine的博客-CSDN博客

③,NaN: 比如说,Double里边的NaN是一个double类型的常量,但是NaN和任何数据用==比较,都是false;

详情参见:Double里边的NaN是什么?_Morning sunshine的博客-CSDN博客

·

最后:

所以,对于double类型,>、<可以直接进行比较,

==、>=、<=这种情况,最好是通过Double.doubleToLongBits()方法将其先转为long类型,然后再去进行比较。

double类型的两个数可以直接比较吗?相关推荐

  1. java double 保留小数_java使double类型保留两位小数的方法

    java使double类型保留两位小数的方法 本文是百分网小编整理的主要介绍关于java使double类型保留两位小数的方法,有需要的朋友们一起看看吧!想了解更多相关信息请持续关注我们应届毕业生考试网 ...

  2. java double类型保留两位小数的几种方法

    java double类型保留两位小数的几种方法 返回double类型的(转换比较方便) ①能四舍五入 double d = 114.145; d = (double) Math.round(d * ...

  3. java中double类型显示两个小数,比如12.00

    Double类型的数据如何保留两位小数? 各位大虾,现有Double类型的数据,如何转换为保留两位小数的数,返回值的类型仍然是Double类型的,而不是字符串类型. 比如     0,返回" ...

  4. Java中double类型保留两位小数

    java中对double类型的小数经常会有小数点后边保留一位小数或者保留两位小数的需求. javaAPi中提供了一个专门的类BigDecimal,用来对超过16位有效位的数进行精确的运算. 使用步骤: ...

  5. java double类型保留两位小数4种方法

    4种方法,都是四舍五入,例:import java.math.BigDecimal;import java.text.DecimalFormat;import java.text.NumberForm ...

  6. C中不能直接比较两个double类型

    在比较float 和double类型的时候,因为float/double精度的问题,比如1.000000001可能和1.0000000000001相等,不应该直接使用a>b等类似的方式进行比较, ...

  7. java方法重载两个数相加_java方法重载实验:判断键盘输入的两个数据的类型后进行比较...

    实验内容: 使用java语言编程,实现键盘录入两个数据,比较两个数是否相等(采用方法调用方式),输出比较结果: 提高:对实现数字比较的方法进行重载,使之适应int.float.double.short ...

  8. Java中比较两个Double类型数据的大小

    在java中int类型比较可以用"==",而double类型的数据不能用"= ="比较,否则得到永不相等的结果. 一般可以Double的doubleToLong ...

  9. 类型两个数相减_小学数学简便计算12种分类+5种易错类型,打印出来给孩子练习!(可打印!)...

    简便计算对于小学生来说是个难点,也是最容易出现错误的题型. 简便计算题型 1.同种运算想交换律和结合律:交换就是为了结合. 2.有乘有加(或有减)有相同数,要想乘法分配律,无相同数找倍数关系变相同数用 ...

最新文章

  1. [cocos2dx笔记010]用于UI的事件管理器
  2. python开发环境功能介绍_第一模块 第3章 Python介绍与环境配置
  3. LeetCode 1172. 餐盘栈(栈 + set)
  4. python协程asyncio 应用_Python-如何使用asyncio同时运行多个协程?
  5. Java集合框架——概述
  6. mixin风格的bases class
  7. 查询数据库中所有的表的信息
  8. apple pay充游戏后退款_iOS退款内幕
  9. matlab imagesc 平滑,在matlab中,如何使用imagesc在2D热图中“平滑”像素
  10. 代购集运系统平台一键上传淘宝商品至韩国coupang经验分享
  11. 什么是冒烟测试?什么是回归测试?
  12. 过去式加ed的发音_过去式,过去分词,加ed 后的读法
  13. java版精简搜狗皮肤
  14. 7-3 将整数转换为汉字大写数字
  15. CentOS 8.1测速 linux 测速
  16. 眼花缭乱中看Metro Style—MS Apps Store—Desktop Apps以及Win-Runtime和Win32
  17. linux服务器之间文件传输scp
  18. 企业网站用什么服务器操作系统?
  19. 论文投稿指南——中文核心期刊推荐(物理学)
  20. 多边形对角线交点个数

热门文章

  1. JVM学习笔记——垃圾回收器
  2. javaweb-异步请求AjaxaxiosJSON
  3. 谷歌拼音输入法-里程碑式的跃进
  4. 固定docker容器IP方法
  5. vscode 中写完代码 Ctrl + s 保存即可格式化代码 或者 (Shift+Alt+f)
  6. 除法竖式在MathType中该怎样进行编辑
  7. python openpyxl 设置表格列宽的自动适应_Python的openpyxl列宽调整大小
  8. 模拟信号转RS-485/232,数据采集A/D转换模块 WJ21
  9. a标签与link标签的区别
  10. 关于吉他5种指型Mi-La-Re-Sol-Ti