bigdecimal 和double 的效率問題

 package com.test;
import java.math.BigDecimal;
public class TestDoubleAndBigDecimal {
 
 public static int time = 1000000;
  
    public static BigDecimal computeByBigDecimal(double x, double y ) {
        BigDecimal result = BigDecimal.ZERO;
        BigDecimal decimalX = BigDecimal.valueOf(x);
        BigDecimal decimalY = BigDecimal.valueOf(y);
        for (int i = 0; i < time; i++) {
            result = result.add(decimalX.multiply(decimalY));
        }
        return result;
    }
 
    public static double computeByDouble(double x, double y) {
        double result = 0;
        for (int i = 0; i < time; i++) {
            result += x * y;
        }
        return result;
    }
 
    public static void main(String[] args) {
       
        long begin1 = System.currentTimeMillis();
        BigDecimal result1 = computeByBigDecimal(0.0034567892165, 13.276);
        long end1 = System.currentTimeMillis();
        
        long begin2 = System.currentTimeMillis();
        double result2 = computeByDouble(0.0034567892165, 13.276);
        long end2 = System.currentTimeMillis();
 
        long bigDecimalTime = (end1 - begin1);
        long doubleTime = (end2 - begin2);
        System.out.println("BigDecimal:" + result1);
        System.out.println("bigDecimalTime :" + bigDecimalTime);
        System.out.println("Double:" + result2);
        System.out.println("doubleTime :" + doubleTime);
 
        System.out.println("timeUsed1/timeUsed2=" + bigDecimalTime / doubleTime);
    }
}

執行的結果:java

BigDecimal:45892.3336382540000000
bigDecimalTime :253
Double:45892.333638839744
doubleTime :3
bigDecimalTime/doubleTime=84算法

 

彷佛使用 bigdecimal 和double 計算 速度相差84倍 。用於計算的算法  速度天然就慢了下來。code

若是對於經度要求不高,固然用 double直接算了。ip

若是對經度要求高的話  只能 使用 bigdecimal 。ci

相關文章
相關標籤/搜索