Java中float和double的精度
比较基本类型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的精度的更多相关文章
- 精确计算java中float和double的精度
[本文相关的代码放在github上.地址为:https://github.com/VigourJiang/StructuredFloat] Java中double类型的格式基本遵循IEEE 754标准 ...
- Java中 float、double使用注意问题
在java中运行一下代码 System.out.println(2.00-1.10);输出的结果是:0.8999999999999999很奇怪,并不是我们想要的值0.9 再运行如下代码:System. ...
- Java中float和double转换的问题
为什么double转float不会出现数据误差,而float转double却误差如此之大? double d = 3.14; float f = (float)d; System.out.prin ...
- Java中float、double、long类型变量赋值添加f、d、L尾缀问题
展开1. 添加尾缀说明 我们知道Java在变量赋值的时候,其中float.double.long数据类型变量,需要在赋值直接量后面分别添加f或F.d或D.l或L尾缀来说明. 其中,long类型最好以 ...
- JAVA中float与double的区别
float是单精度类型,精度是8位有效数字,取值范围是10的-38次方到10的38次方,float占用4个字节的存储空间 double是双精度类型,精度是17位有效数字,取值范围是10的-308次方到 ...
- java中float和double的区别
float表示单精度浮点数在机内占4个字节,用32位二进制描述. double表示双精度浮点数在机内占8个字节,用64位二进制描述.浮点数在机内用指数型式表示,分解为:数符,尾数,指数符,指数四部分. ...
- 【转】JAVA程序中Float和Double精度丢失问题
原文网址:http://blog.sina.com.cn/s/blog_827d041701017ctm.html 问题提出:12.0f-11.9f=0.10000038,"减不尽" ...
- float和double的精度
作者: jillzhang 联系方式:jillzhang@126.com 原网址:http://blog.csdn.net/wuna66320/article/details/1691734 1 范围 ...
- float与double的精度和范围
1 范围 float和double的范围是由指数的位数来决定的. float的指数位有8位,而double的指数位有11位,分布如下: float: 1bit(符号位) 8bits(指数位) 23bi ...
- Java中long和double的原子性
Java中long和double的原子性 java中基本类型中,long和double的长度都是8个字节,32位(4字节)处理器对其读写操作无法一次完成,那么,JVM,long和double是原子性的 ...
随机推荐
- java bean 慎用 is开头isXxx开头的属性,若必须得用,那么一定要记得 idea自动生成的 setter 和 getter会不标准,从而会引起问题,他自动生成后,需要手工再次进行修改,才可使用,要不然有可能引起各种问题
直接上例子: 然后用 Idea 自动生成 getter 和 setter public class XyzBean { //最普通的 private String name; //Boolean类型, ...
- 下载安装JDK 和 IntelliJ IDEA 和 ActiveMq
wget http://yun.diandaxia.com/other/jdk-8u92-linux-x64.rpm rpm -ivh jdk-8u92-linux-x64.rpm wget http ...
- Windows OhmGraphite 配置
Windows OhmGraphite 配置 由于windows_exporter无法监控温度相关的指标,那么就需要使用OhmGraphite进行监控该指标. 下载 访问 https://github ...
- NC16611 [NOIP2009]最优贸易
题目链接 题目 题目描述 C国有n个大城市和m条道路,每条道路连接这n个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这m条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双向 ...
- ARP(Address Resolution Protocol) Packet
Address Resolution Protocol The Address Resolution Protocol (ARP) is a communication protocol used f ...
- Js中Reflect对象
Js中Reflect对象 Reflect是ES6起JavaScript内置的对象,提供拦截JavaScript操作的方法,这些方法与Proxy对象的handlers中的方法基本相同. 描述 Refle ...
- nginx添加站点
1.修改配置文件 vim /usr/local/nginx/conf/nginx.conf 添加一个server节点: server { listen 81; ...
- SpringBoot整合Groovy脚本,实现动态编程
Groovy简介 Groovy 是增强 Java 平台的唯一的脚本语言.它提供了类似于 Java 的语法,内置映射(Map).列表(List).方法.类.闭包(closure)以及生成器.脚本语言不会 ...
- win32 - 使用Safer API创建受限的令牌
#include <Windows.h> #include <WinSafer.h> #include <stdio.h> #include <sddl.h& ...
- Mysql 插入timestamp没有使用默认值问题
在一次升级过程中,发现Mysql插入数据报了个错 Column 'create_time' cannot be null. 但是看了下这个字段虽然是非null,但是是有默认值的 `create_tim ...