java BigDecimal比较大小
使用的是compareTo方法
BigDecimal a=new BigDecimal(123.123);
BigDecimal b =new BigDecimal(300.12);
int res = a.compareTo(b);
大小情况 | res值 |
a小于b | -1 |
a等于b | 0 |
a大于b | 1 |
经常会有同学会想起来BigDecimal的对比方法而直接用 BigDecimal 转 double方式 然后进行比对。
BigDecimal a=new BigDecimal(123.123);
BigDecimal b =new BigDecimal(300.12);
if(a.doubleValue()>b.doubleValue()){}
那我们来看一下,这两种方式性能怎么样
然后写了如下代码
BigDecimal a=new BigDecimal(123.123);
BigDecimal b =new BigDecimal(300.12);
long startTime = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {int dd = a.compareTo(b);
}
long endTime = System.currentTimeMillis();
System.out.println("程序运行时间:" + (endTime - startTime) + "ms");
startTime = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {boolean dd = a.doubleValue()>b.doubleValue();
}
endTime = System.currentTimeMillis();
System.out.println("程序运行时间:" + (endTime - startTime) + "ms");
方法 | 第一次 | 第二次 | 第三次 | 第四次 | 第五次 | 平均时间 |
BigDecimal比较 | 6ms | 6ms | 5ms | 6ms | 6ms | 5.8ms |
double比较 | 46ms | 42ms | 39ms | 58ms | 39ms | 44.8ms |
我们把执行的次数提升100倍
BigDecimal a=new BigDecimal(123.123);
BigDecimal b =new BigDecimal(300.12);
long startTime = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {int dd = a.compareTo(b);
}
long endTime = System.currentTimeMillis();
System.out.println("程序运行时间:" + (endTime - startTime) + "ms");
startTime = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {boolean dd = a.doubleValue()>b.doubleValue();
}
endTime = System.currentTimeMillis();
System.out.println("程序运行时间:" + (endTime - startTime) + "ms");
方法 | 第一次 | 第二次 | 第三次 | 第四次 | 第五次 | 平均时间 |
---|---|---|---|---|---|---|
BigDecimal比较 | 70ms | 76ms | 61ms | 78ms | 101ms | 77.2ms |
double比较 | 954ms | 969ms | 898ms | 909ms | 924ms | 930.8ms |
总结:
使用BigDecimal比较方法和使用转换成double进行对比方法 性能有明显优势,执行次数越多越明显。
java BigDecimal比较大小相关推荐
- Java BigDecimal 比较大小
需要使用使用compareTo(BigDecimal)方法 BigDemical a = BigDecimal.valueOf(1); BigDemical b = BigDecimal.valueO ...
- bigdecimal乘法_Java面试题之BigDecimal比较大小问题
BigDecimal float和double类型的主要设计目标是为了科学计算和工程计算.他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的.然而,它们没有提供完全 ...
- Java BigDecimal详解
Java BigDecimal详解 1. BigDecimal概述 2. BigDecimal方法 2.1 BigDecimal常用构造函数 2.2 BigDecimal常用方法详解 3. BigDe ...
- JVM概念之Java对象的大小与引用类型
2019独角兽企业重金招聘Python工程师标准>>> 本文来自和你在一起的博客,原文标题:<JVM调优总结(二)-一些概念>.本文总结了JVM概念中的Java对象的大小 ...
- java bigDecimal and double
Java BigDecimal和double BigDecimal是Java中用来表示任意精确浮点数运算的类,在BigDecimal中,使用unscaledValue × 10-scale来表示一个浮 ...
- java统计空间占用_JVM —— Java 对象占用空间大小计算
引用类型(reference type: Integer)在 32 位系统上每一个占用 4bytes(即32bit, 才干管理 2^32=4G 的内存), 在 64 位系统上每一个占用 8bytes( ...
- linux看java堆大小,linux 改java堆内存大小
linux 改java堆内存大小 [2021-02-08 23:06:29] 简介: linux查内存大小的方法:首先打开应用程序:然后选择系统工具选项,并单击系统终端选项:接着在系统终端命令行输入 ...
- tips:Java基本数据类型大小比较
tips:Java基本数据类型大小比较! Java语言提供了八种基本类型.六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型. ------四个整数型------ (1)byte:b ...
- java BigDecimal equals和compareTo区别
为什么80%的码农都做不了架构师?>>> 对于BigDecimal的大小比较,用equals方法的话会不仅会比较值的大小,还会比较两个对象的精确度,而compareTo方法则不 ...
最新文章
- android 手机号分段_android 手机号分段_android系统实现手机号添加分割符
- HTML的br/标签和hr/标签
- JavaScript取出字符串中括号里的内容
- Java工作笔记-使用Hibernate连接mysql数据库并进行增、删、改、查!
- CFFI - ABI模式与API模式
- Java 笔记(二)
- 网易云数据库容灾策略
- 君正T31 ACC解码
- 音视频和图像相关知识点总结
- 八大数据结构及常见面试题
- 集成极光推送和厂商通道相关总结
- 浏览器清除缓存快捷键
- Excel合并两列中的文本内容
- 脉聊社交网站源码类似微博的社交源码 模板UI非常漂亮自适应手机版 重点是有原生APP
- 如何知道自己的手机注册了多少软件和网站?(亲测有效)
- php 菱形问号,python爬虫出现菱形问号乱码的解决方法
- 春节不出门!这三款超好评编程游戏,好玩到停不下来
- Java之png图片工具类
- 对抗生成神经网络-GAN通俗理解
- html实现文字滚动