Double運算丟失精度問題以及BigDecimal用法
阿新 • • 發佈:2019-01-12
一、丟失精度問題還原。
public double add() {
double number1 = 1;
double number2 = 20.2;
double number3 = 300.03;
double result = number1 + number2 + number3;
System.out.println(result);
return result;
}
列印結果:321.22999999999996
二、解決方式。
BigDecimal num1 = new BigDecimal("100"); BigDecimal num2 = new BigDecimal("50"); // 或者 BigDecimal num1 = new BigDecimal(100D); BigDecimal num2 = new BigDecimal(50D); //加法 BigDecimal result1 = num1.add(num2); out.println("和是 : " + result1); //減法 BigDecimal result2 = num1.subtract(num2); out.println("差是 : " + result2); //乘法 BigDecimal result3 = num1.multiply(num2); out.println("積是 : " + result3); //除法 BigDecimal result4 = num1.divide(num2); out.println("商是 : " + result4); //比較 BigDecimal num = new BigDecimal("100"); //用做比較的值 out.println(num1.compareTo(num2)); //大於 時,返回 1 out.println(num.compareTo(num1)); //等於 時,返回 0 out.println(num2.compareTo(num1)); //小於 時,返回 -1 out.println(num1.min(num2)); //求兩個數的最小值,返回小的數 out.println(num1.max(num2)); //求兩個數的最大值,返回大的數