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是原子性的 ...
随机推荐
- .NET Core开发实战(第6课:作用域与对象释放行为)--学习笔记(下)
06 | 作用域与对象释放行为 接下来,把服务切换为单例模式,通过工厂的方式 services.AddSingleton<IOrderService>(p => new Dispos ...
- Python3排序sorted(key=lambda)
Python3排序sorted(key=lambda) 简述: 假如d是一个由元组构成的列表,我们需要用到参数key,也就是关键词,看下面这句命令,lambda是一个隐函数,是固定写法,不要写成别的单 ...
- NES/FC游戏: 勇者斗恶龙2
武器 名称 攻击力 价格 主角 王子 公主 来源 Bamboo Stick 2 - x x x Wielded by the Princess of Moonbrooke at the start o ...
- MySQL日志:slow query log
ySQL的慢查询日志可以用来找出执行时间过长的查询语句,并进行针对性的优化. 一.slow log相关参数 以下参数都是动态参数,可以在实例运行时修改. slow_query_log=1 #是否启 ...
- Django实战之文件上传下载
项目介绍 最近学习django,通过文件上传下载这个小项目,总结下常用的知识点. 做这个案例我有以下需求: 1.要支持一次上传多个文件 2.支持上传后记录上传的数据以及列表展示 3.支持下载和删除文件 ...
- 如何处理Long类型精度丢失问题?
一.现象与分析: 1.1. 现象 前后端交互,当后端传一些值给前端的时候,如果是long类型,有可能会出现数字太大而前端接收不了(java中的long大于js的number)而导致数据不一致,精度会丢 ...
- 异步aioredis连接时报错TypeError: duplicate base class TimeoutError问题
版本 python3.11版本,aioredis 2.0.1版本,redis 7.x版本 redis.conf配置文件 daemonize yes bind 0.0.0.0 port 6379 pro ...
- 格式化占位符%r和!r
# 作用 都是格式化原形输出,!r用于format格式化,%r用于%格式化 # 示例 a = '123' b = 'hello, {!r}'.format(a) b = 'hello, %r' % ( ...
- React 中 Ref 引用
不要因为别人的评价而改变自己的想法,因为你的生活是你自己的. 1. React 中 Ref 的应用 1.1 给标签设置 ref 给标签设置 ref,ref="username", ...
- error: RPC failed; curl 92 HTTP/2 stream 0 was not closed cleanly: PROTOCOL_ERROR (err 1)
起因:自己顶不住好奇心,升级了Mac系统.界面看起来,真香!然鹅用起来其实也挺香,就是有些开发常用的竟然挂掉了,挂掉了. 最直观的就是Parallels Desktop , xcode , git,完 ...