比较基本类型double和float和某一个数是否相等的时候,不要用==或>=或<=,因为double和float都是有精度问题的,计算机只能保存一定位数的小数,这就会存在精度问题。

下面我们看一下java中float和double能够比较到小数后几位:

代码实现:

public class Main {
public static void main(String[] args) {
float f6 = 1.000003f;//6位小数位,总共7位
float f_8 = 10.000003f;//6位小数位,总共8位
double d15 = 1.000000000000003;//15位小数位,总共16位
double d_17 = 10.000000000000003;//15位小数位,总共17位 float f7 = 1.0000003f;//7位小数位,总共8位
float f_9 = 10.0000003f;//7位小数位,总共9位
double d16 = 1.0000000000000003;//16位小数位,总共17位
double d_18 = 10.0000000000000003;//16位小数位,总共18位 float f8 = 1.00000003f;//8位小数位,总共9位
float f_10 = 10.00000003f;//8位小数位,总共10位
double d17 = 1.00000000000000003;//17位小数位,总共18位
double d_19 = 10.00000000000000003;//17位小数位,总共19位 System.out.println(f6==1);
System.out.println(d15==1);
System.out.println("------------------"); System.out.println(f7==1);
System.out.println(d16==1);
System.out.println("------------------"); System.out.println(f8==1);
System.out.println(d17==1);
System.out.println("------------------");
//-----------------------------------------------
System.out.println(f_8==10);
System.out.println(d_17==10);
System.out.println("------------------"); System.out.println(f_9==10);
System.out.println(d_18==10);
System.out.println("------------------"); System.out.println(f_10==10);
System.out.println(d_19==10);
System.out.println("------------------");
}
}

输出结果:

false
false
------------------
false
false
------------------
true
true
------------------

------------------------------------------

false
false
------------------
true
true
------------------
true
true
------------------

再举一个案例:

public class Main {
public static void main(String[] args) {
float f6 = 10000003.87f;//整数位8位,总共10位
float f_8 = 100000003.87f;//整数位9位,总共11位 System.out.println(f6==10000003); System.out.println(f_8==100000003);
}
}

输出结果:

false

true

上面两个案例说明,float和double的精确度是按照整体位数来的,并不是只是考虑小数部分。根据显示结果可以看出,float只能精确8位,double可以精确比较到17位,超出比较的精度就会得到错误的结果。

Java中float和double的精度的更多相关文章

  1. 精确计算java中float和double的精度

    [本文相关的代码放在github上.地址为:https://github.com/VigourJiang/StructuredFloat] Java中double类型的格式基本遵循IEEE 754标准 ...

  2. Java中 float、double使用注意问题

    在java中运行一下代码 System.out.println(2.00-1.10);输出的结果是:0.8999999999999999很奇怪,并不是我们想要的值0.9 再运行如下代码:System. ...

  3. Java中float和double转换的问题

    为什么double转float不会出现数据误差,而float转double却误差如此之大?   double d = 3.14; float f = (float)d; System.out.prin ...

  4. Java中float、double、long类型变量赋值添加f、d、L尾缀问题

    展开1. 添加尾缀说明 我们知道Java在变量赋值的时候,其中float.double.long数据类型变量,需要在赋值直接量后面分别添加f或F.d或D.l或L尾缀来说明.  其中,long类型最好以 ...

  5. JAVA中float与double的区别

    float是单精度类型,精度是8位有效数字,取值范围是10的-38次方到10的38次方,float占用4个字节的存储空间 double是双精度类型,精度是17位有效数字,取值范围是10的-308次方到 ...

  6. java中float和double的区别

    float表示单精度浮点数在机内占4个字节,用32位二进制描述. double表示双精度浮点数在机内占8个字节,用64位二进制描述.浮点数在机内用指数型式表示,分解为:数符,尾数,指数符,指数四部分. ...

  7. 【转】JAVA程序中Float和Double精度丢失问题

    原文网址:http://blog.sina.com.cn/s/blog_827d041701017ctm.html 问题提出:12.0f-11.9f=0.10000038,"减不尽" ...

  8. float和double的精度

    作者: jillzhang 联系方式:jillzhang@126.com 原网址:http://blog.csdn.net/wuna66320/article/details/1691734 1 范围 ...

  9. float与double的精度和范围

    1 范围 float和double的范围是由指数的位数来决定的. float的指数位有8位,而double的指数位有11位,分布如下: float: 1bit(符号位) 8bits(指数位) 23bi ...

  10. Java中long和double的原子性

    Java中long和double的原子性 java中基本类型中,long和double的长度都是8个字节,32位(4字节)处理器对其读写操作无法一次完成,那么,JVM,long和double是原子性的 ...

随机推荐

  1. TActionManager Delphi 超级方便的快捷键 草草

    delphi 中用快捷键 草 实在是 太简单了 . 自己摸索出来的 方法 --------------------------------------------------------------- ...

  2. DNS反向解析

    一:创建反向解析区 1.和创建正向解析区的步骤类似,选主要区域 这里设置的IP是192.168.1,一直点确定即可 2.指针记录即反向解析记录,记录ip对应的域名,是反向解析区最常用的记录 输入ip和 ...

  3. HBase-统计表总行数的三种方式

    由于Hbase是列式数据库,没有提供类似SQL的数据查询语句,可以通过以下三种方式获取表的总行数. 1. 使用Hbase自带的Count命令 hbase提供了count命令可以在hbase交互界面使用 ...

  4. 什么是TDD(一)

    引子 回顾 虽然我很早以前就听说单元测试,也曾经多次在项目中引入单元测试框架和单元测试的实践为代码质量的提升带来了一丝助力. 但这种方式更多的是从软件调试的角度出发,即将单元测试作为一种测试方法可用性 ...

  5. Power BI 9 DAY

    图形决策树

  6. elasticsearch should实现or功能,设置minimum_should_match

    elasticsearch实现传统数据库中的or功能,需要使用bool下面的should关键字,对于A or B的情况,应该至少返回A和B中的一个,但是如下语句,不仅返回A和B中的至少一个,也返回了没 ...

  7. Vue+ElementUI实现用户管理前后分离实战二:API接口篇

    项目介绍 上一篇介绍了前端相关实现代码和效果,本篇则介绍后端接口API如何实现. :) 上一篇地址: https://blog.csdn.net/IndexMan/article/details/11 ...

  8. 如何在Windows上使用Git创建一个可执行脚本?

    长话短说,今天介绍如何在windows上使用Git上创建一个可执行的shell脚本. 首先我们要知道windows上Git新添加的文件权限是:-rw-r--r--(对应权限值是644),而通常创建的s ...

  9. win32 - QueryDisplayConfig的使用

    QueryDisplayConfig函数检索关于所有显示设备的所有可能的显示路径,或视图,在当前设置的信息. C++样本: (开箱即用) 代码列出了所有显示器的名称和拓展模式 #include < ...

  10. RESTful API 介绍,设计

    一:RESTful介绍 在互联网发展过程中,最开始是以html静态网页展示内容,url的表现形式一般为 http://www.example.com/getInfo.html:后来随着需求不断提高以及 ...