Java double类型比较大小详解
Java double类型比较大小
一、问题描述
把从数据库里查询出来的数据,金额小于1的数据给过滤掉,数据库里的数据有很多都是0.01,0.02,等。
二、解决方法
先把他们转成BigDecimal类型,然后在利用BigDecimal中的compareTo方法去比较大小,实现如下:
@org.junit.Test public void Test(){ BigDecimal big = new BigDecimal(1); BigDecimal Graphicprice = new BigDecimal(0.01);//图文价格 BigDecimal Speechprice = new BigDecimal(0.02);//语音价格 BigDecimal Videoprice = new BigDecimal(1);//视频价格 System.out.println(Graphicprice + " " + Speechprice +" " + Videoprice); if(Graphicprice.compareTo(big)<0 || Graphicprice.compareTo(big)==0 || Speechprice.compareTo(big)<0 || Speechprice.compareTo(big)==0 || Videoprice.compareTo(big)<0 || Videoprice.compareTo(big)==0){ System.out.println("ok"); } }
输出结果如下:
@org.junit.Test public void Test(){ BigDecimal data1 = new BigDecimal("1"); BigDecimal data2 = new BigDecimal("0.01"); if (data1.compareTo(data2) < 0) { System.out.println("第二位数大!"); } if (data1.compareTo(data2) == 0) { System.out.println("两位数一样大!"); } if (data1.compareTo(data2) > 0) { System.out.println("第一位数大!"); } }
关于两个double类型数的大小判断
大于小于是可以像整数那样直接判断的,但是不可以判断两个double是相等的。
因为
double类型的表示往往是不精确的(近似表示). 有精度范围的那种. 如果是运算结果,即使都是0.0,也不保证相等!一般用一个容差e(很小的值)
那么a和b相等就可以表示为
if ( fabs(a-b) < e ) return true;
注意:double类型虽然可以通过>和<直接比较,但是大于等于,小于等于是不能直接>=和<=比较的。
错误比较方式:now >= mid*n
正确比较方式:now - mid * n > -0.000001
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Spring Boot集成tablesaw插件快速入门示例代码
Tablesaw是一款Java的数据可视化库,数据解析库,主要用于加载数据,对数据进行操作(转化,过滤,汇总等),类比Python中的Pandas库,本文介绍Spring Boot集成tablesaw插件快速入门Demo,感兴趣的朋友一起看看吧2024-06-06SpringBoot HttpMessageConverter消息转换器的使用详解
在整个数据流转过程中,前端的请求报文转化为Java对象,Java对象转化为响应报文,这里就用到了消息转换器HttpMessageConverter2022-06-06
最新评论