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