java之double类型数值的比较
先看demo:
public class L26 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// double a= 300000;
double x= 300000.00000000003;//double比较,小数点后有效位
double y= 300000.000000000003;//主要注意的是double类型直接==/>=/<=的比较,涉及到有效位
System.out.println(x<=300000);
System.out.println(y<=300000);
}
}
/*
*output:
*false
true
* */
总结:double是双精度基本数据类型,double与double之间,涉及==(包括>=,<=)的比较,就得考虑double的精度问题。
如上面的例子,
当x=300000.00000000003,与
300000比较,得到的是false,说明300000.00000000003>300000;
当y=300000.000000000003,与
300000比较,得到的是true,说明300000.00000000003<=300000;(jvm实际判定的是300000.000000000003==300000)猛然看上去,感觉不对啊,应该是大于啊。这就是double的精度问题。当小数点后位数 大于(17-6)11位时,jvm就会忽略这个精度,这时的y=300000.00000000000。所以jvm就会判定y==300000.
这种情况,我们在开发时如果需要更精确的比较double类型,就要用到 BigDecimal 这个类了。
上面我为什么用17-6呢?看下这个例子:
public static void main(String[] args) {
double x= 3.0000000000000003;//double比较,小数点后有效位:17-(整数位)。总有效位为17位
double y= 30.000000000000003;//17位数字
double z= 300.00000000000003;
double w= 3000.0000000000003;
System.out.println(x==3);
System.out.println(y==30);
System.out.println(z==300);
System.out.println(w==3000);
System.out.println("--------------------分界线-------------------");
//小数后都加一个0
double x1= 3.00000000000000003;//18位数字
double y1= 30.0000000000000003;
double z1= 300.000000000000003;
double w1= 3000.00000000000003;
System.out.println(x1==3);
System.out.println(y1==30);
System.out.println(z1==300);
System.out.println(w1==3000);
}
}
/*
output:
false
false
false
false
--------------------分界线-------------------
true
true
true
true
*/
java之double类型数值的比较的更多相关文章
- [ JAVA编程 ] double类型计算精度丢失问题及解决方法
前言 如果你在测试金融相关产品,请务必覆盖交易金额为小数的场景.特别是使用Java语言的初级开发. Java基本实例 先来看Java中double类型数值加.减.乘.除计算式实例: public cl ...
- Java中double类型的数据精确到小数点后两位
Java中double类型的数据精确到小数点后两位 多余位四舍五入,四种方法 一: double f = 111231.5585;BigDecimal b = new BigDecimal(f); d ...
- java的double类型如何精确到一位小数?
java的double类型如何精确到一位小数? //分钟转小时vacationNum = (double)Math.round(vacationNum/60*10)/10.0;overTimeNum ...
- 关于java中Double类型的运算精度问题
标题 在Java中实现浮点数的精确计算 AYellow(原作) 修改 关键字 Java 浮点数 精确计算 问题的提出:如果我们编译运行下面这个程序会看到什么?publi ...
- 关于java中Double类型的运算精度问题(转)
Java Java double:浮点数:精确计算 public class Test{ public static void main(String args[]){ Syst ...
- JAVA中double类型运算结果异常的解决
问题: 对两个double类型的值进行运算,有时会出现结果值异常的问题.比如: System.out.println(19.99+20); System.out.println(1.0-0.66); ...
- java中double类型显示两个小数,比如12.00
Double类型的数据如何保留两位小数? 各位大虾,现有Double类型的数据,如何转换为保留两位小数的数,返回值的类型仍然是Double类型的,而不是字符串类型. 比如 0,返回“0.00” ...
- java 百分比显示Double类型数值
DecimalFormat percent = new DecimalFormat("0.00%"); completed_num = (double) involvedTask_ ...
- Java中Double类型计算问题
public class Test{ public static void main(String args[]){ System.out.println(0.05+0.01); ...
随机推荐
- 对django框架架构和request/response处理流程的分析
一. 处理过程的核心概念 如下图所示django的总览图,整体上把握以下django的组成: 核心在于中间件middleware,django所有的请求.返回都由中间件来完成. 中间件,就是处理HTT ...
- 洛谷P2024 食物链 [NOI2001] 并查集
正解:并查集 解题报告: 传送门(咕了! 其实没有很难(虽然我是交了三发才过的QAQ 但是一来好久没打并查集了恢复一下智力 二来看着智推里唯一一个蓝就很不爽(,,,虽然做了这题之后又补上了个蓝题QAQ ...
- 三个在线django速成教程(转)
add by zhj: 除了这几个在线的,有些书也不错 1. Two Scoops of Django 2. Instant Django 1.5 Application Development St ...
- day12(jsp指令&内置对象&动作标签、JavaBean、EL表达式&函数库)
day12 JSP指令 JSP指令概述 JSP指令的格式:<%@指令名 attr1="" attr2="" %>,一般都会把JSP指令放到JSP文件 ...
- android(十五) FTP的两种工作模式
(一)PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链 当需要传送数据时,客户端在命令链路上用 PORT命令告诉服务器:“我打开了 ...
- 表单(中)-EasyUI Combogrid 组合网格、EasyUI Numberbox 数字框、EasyUI Datebox 日期框、EasyUI Datetimebox 日期时间框、EasyUI Calendar 日历
EasyUI Combogrid 组合网格 扩展自 $.fn.combo.defaults 和 $.fn.datagrid.defaults.通过 $.fn.combogrid.defaults 重写 ...
- sysbench 0.4.12安装
前提:mysql已安装完成,请参考http://www.cnblogs.com/lizhi221/p/6813907.html 安装依赖环境包: yum install -y bzr yum in ...
- 图:无向图(Graph)基本方法及Dijkstra算法的实现 [Python]
一般来讲,实现图的过程中需要有两个自定义的类进行支撑:顶点(Vertex)类,和图(Graph)类.按照这一架构,Vertex类至少需要包含名称(或者某个代号.数据)和邻接顶点两个参数,前者作为顶点的 ...
- Linux centos7 redis安装教程
1.下载解压 #下载至/home/install(或windows系统下载后上传) mkdir /home/install cd /home/install wget http://124.205.6 ...
- oracle数据库中导入Excel表格中的数据
1.点击[工具]-->[ODBC 导入器],如图: 2.在导入器里选择第一个[来自ODBC的数据],用户名/系统DSN-->填写[Excel Files],输入用户名和密码,点击 [连接] ...