【性能】Java BigDecimal和double性能比较
来源:互联网 发布:淘宝卖家旺旺名怎么改 编辑:程序博客网 时间:2024/06/03 09:50
我们知道 java 里面有个 BigDecimal ,可以解决我们的精度丢失问题。
但是很少关注其性能情况,因为一般来说可以忽略不计的。
也确实,解决大数据量运算 java 本身并不适合。
本人愚笨,很早之前用 java 解决一个大数据量运算的算法,对性能要求很高。中间用了 BigDecimal ,注意到其性能的一些情况,发现其性能是 double 的 100 倍左右。
具体没有去深究其原因,平时其实也不用对这个在意,但是对这个知识做个基本的了解还是有必要的。
直接上代码:
Java代码
- import java.math.BigDecimal;
- public class BigDecimalEfficiency {
- public static int REPEAT_TIMES = 1000000;
- public static double computeByBigDecimal(double a, double b) {
- BigDecimal result = BigDecimal.valueOf(0);
- BigDecimal decimalA = BigDecimal.valueOf(a);
- BigDecimal decimalB = BigDecimal.valueOf(b);
- for (int i = 0; i < REPEAT_TIMES; i++) {
- result = result.add(decimalA.multiply(decimalB));
- }
- return result.doubleValue();
- }
- public static double computeByDouble(double a, double b) {
- double result = 0;
- for (int i = 0; i < REPEAT_TIMES; i++) {
- result += a * b;
- }
- return result;
- }
- public static void main(String[] args) {
- long test = System.nanoTime();
- long start1 = System.nanoTime();
- double result1 = computeByBigDecimal(0.120000000034, 11.22);
- long end1 = System.nanoTime();
- long start2 = System.nanoTime();
- double result2 = computeByDouble(0.120000000034, 11.22);
- long end2 = System.nanoTime();
- long timeUsed1 = (end1 - start1);
- long timeUsed2 = (end2 - start2);
- System.out.println("result by BigDecimal:" + result1);
- System.out.println("time used:" + timeUsed1);
- System.out.println("result by Double:" + result2);
- System.out.println("time used:" + timeUsed2);
- System.out.println("timeUsed1/timeUsed2=" + timeUsed1 / timeUsed2);
- }
- }
结果:
result by BigDecimal:1346400.00038148
time used:572537012
result by Double:1346400.000387465
time used:5280000
timeUsed1/timeUsed2=108
对比图:
从以上结果来看,bigDecimal的性能可见一斑。其性能竟然是double的100倍,这是很早之前没想到的。
0 0
- 【性能】Java BigDecimal和double性能比较
- Java BigDecimal和double
- Java BigDecimal和double
- Java BigDecimal和double
- Java BigDecimal和double
- Java BigDecimal和double
- Double和BigDecimal计算比较compareTo不一致的问题[new BigDecimal(a).compareTo(new BigDecimal(b))]
- double和Bigdecimal
- .Net和Java的执行性能比较
- java IO和NIO性能比较
- Java中String和StringBuilder性能比较
- JAVA中switch和if性能比较
- Java Collections性能比较
- QFile和C语言对文件操作的性能比较.--读取double型二进制数据文件
- java float 和 double 的 bug 和解决办法BigDecimal
- float和double精度问题(java.math.BigDecimal)
- 为什么用java.math.BigDecimal 不用float和double
- Java MVC框架性能比较
- ASP访问SQLCE的原理框图
- 焊接调试经历之谈3
- 对于异常出现,而导致android崩溃的处理
- 如何解决在vs2013中编写编程序时出现const char与LPCTSTR不相容问题
- IOS 调用系统相册或照相机tab按钮显示中文
- 【性能】Java BigDecimal和double性能比较
- 【未完成】【翻译】FAAC-WiKi
- Android API 学习日记----《Android简介》
- JVM 内存溢出
- 【小功能2】android获取手机信息(号码,内存,CPU,分辨率,MAC,IP,SD卡,IMEI,经纬度,信号强度等等)
- launchScreen.xib
- 网易面试总结(2014.12.31)
- CAS Client 端与CAS Server端部署在不同机器模拟登出失败【登录成功】
- 9修改框架外观工具栏状态栏