float、double兩種浮點數類型運算是不夠精确,不僅是Java語言,很多程式設計語都有這樣的問題。為了能夠精确表示和計算浮點數,Java提供了BigDecimal類。
BigDecimal類
import java.math.BigDecimal;
public class BG {
public static void main(String[] args) {
double x = 0.1;
double y = 0.2;
//不精确的
System.out.println(x+y);
//精确的
BigDecimal b1 = new BigDecimal(x+"");
BigDecimal b2 = new BigDecimal(y+"");
//加法
BigDecimal b3 = b1.add(b2);
//向基本資料類型轉化,同樣的還有intValue,floatValue,longValue等
double result1 = b3.doubleValue();
System.out.println(result1);
//不精确的 減法
System.out.println(x-y);
double result2 = b1.subtract(b2).doubleValue();
//精确的
System.out.println(result2);
//不精确的 乘法
System.out.println(x*y);
double result3 = b1.multiply(b2).doubleValue();
//精确的
System.out.println(result3);
//不精确的 除法
System.out.println(x/y);
double result4 = b1.divide(b2).doubleValue();
//精确的
System.out.println(result4);
}
}
0.30000000000000004
0.3
-0.1
-0.1
0.020000000000000004
0.02
0.5
0.5