不多说,直接上代码 public class TestBean { public static void main(String[] args) { double c = 0; double a = 1; double b = 0.9; long t1 = new Date().getTime(); for (int i = 0; i < 1000000; i++) { c = Math.round((a - b) * 10) / 10.0; } long t2 = new Date().getTime(); for (int i = 0; i < 1000000; i++) { double p = 10; c = (a * p - b * p) / p; } long t3 = new Date().getTime(); System.out.println(t2 - t1); System.out.println(t3 - t2); test(); } public static int scale1(double num) { int scale = 0; double tmp = 1; while (true) { if ((num * tmp) % 1 == 0) { break; } else { tmp *= 10; scale++; } } return scale; } public static int scale2(double num) { String str = String.valueOf(num); return str.length() - str.indexOf(".") - 1; } public static long testComputeByBigDecimal(double a, double b) { long start = new Date().getTime(); for (int i = 0; i < 1000000; i++) { double c = new BigDecimal(a).subtract(new BigDecimal(b)).doubleValue(); } return new Date().getTime() - start; } public static long testComputeByManual1(double a, double b) { long start = new Date().getTime(); for (int i = 0; i < 1000000; i++) { int sa = scale1(a); int sb = scale1(b); int scale = sa > sb ? sa : sb; double p = Math.pow(10, scale); double c = (a * p - b * p) / p; } return new Date().getTime() - start; } public static long testComputeByManual2(double a, double b) { long start = new Date().getTime(); for (int i = 0; i < 1000000; i++) { int sa = scale2(a); int sb = scale2(b); int scale = sa > sb ? sa : sb; double p = Math.pow(10, scale); double c = (a * p - b * p) / p; } return new Date().getTime() - start; } public static void test() { double a = 1; double b = 0.9; System.out.println(testComputeByBigDecimal(a, b)); System.out.println(testComputeByManual1(a, b)); System.out.println(testComputeByManual2(a, b)); } 输出结果 63 16 9578 93 704