比较基本类型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. 初步上手Git软件及GitHub平台:基本操作方法

      本文介绍Git软件与GitHub平台的基本内容.使用方法与应用场景等. 目录 1 初步介绍 2 使用方法 2.1 GitHub配置 2.2 Git配置 2.3 代码上传至GitHub 1 初步介绍 ...

  2. .NET 云原生架构师训练营(模块二 基础巩固 MySQL环境准备)--学习笔记

    2.4.1 EF Core -- MySQL环境准备 安装 Docker 配置 docker 镜像仓库国内镜像地址 运行 mysql docker container 通过 Navicate 连接 安 ...

  3. 永久解决 WSL vm.max_map_count 65530 is too low 的问题

    问题 在使用基于 WSL 的 Docker 的时候,启动 ES 总是会出现 vm.max_map_count 65530 is too low 问题,导致容器无法启动,网上答案基本就两种,例如 sta ...

  4. Django高级特性:django-apscheduler定时任务

      前言: 在使用Django框架开发web项目时,很多时候需要设置定时任务或让用户手动在页面上设置定时任务 在Django中实现定时任务功能大概有以下三种方法: Celery 分布式任务队列.侧重实 ...

  5. WebAssembly照亮了 Web端软件的未来

    WebAssembly的发展历程相对较短,但影响深远.WebAssembly 于 2015 年首次发布,先驱技术是来自Mozilla的asm.js和Google Native Client,最初的实现 ...

  6. RedHat5 安装中文输入法

    为了学习linux命令,虚拟机里搞了个RedHat 5.4 .下面是安装中文输入法过程: 1.下载并安装小企鹅输入法 fcitx-3.0.0-1.i386.rpm 2.安装后执行以下命令: # cd ...

  7. Java使用正则表达式判断字符串中是否包含某子字符串

    需求: 给定一个字符串s,判断当s中包含"tree fiddy"或"3.50"或"three thirty"子字符串返回true,否则返回f ...

  8. CSS font-weight

    主要理解UI给得英文名 对应得数值 字体粗细:'font-weight'属性名称: font-weight取值: normal | bold | bolder | lighter | 100 | 20 ...

  9. 使用Python读取nc数据

    在地学领域,nc 格式的文件可谓随处可见,这种文件可以存储多维数字矩阵,同时又封装了自描述信息(例如经纬度.高度层.时间戳.单位等),因此使用起来十分方便,不用担心数据和描述信息分离而导致数据不可用. ...

  10. 项目实战:医疗流式细胞术数据文件(.fcs)导出excel表工具

    需求    解析医疗实验室数据文件*.fcs.   Demo导出数据   医疗流式细胞术数据文件标准(.fcs)   流式细胞术数据文件标准于1984年发布,以促进流式细胞术数据分析软件与在不同类型的 ...