在Java將double轉型BigDecimal注意事項

在Java將double轉型BigDecimal注意事項

這篇介紹在Java將double轉型BigDecimal注意事項。

incorrect Example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
float a = 57.3f;

BigDecimal decimalA = new BigDecimal(a);

System.out.println(decimalA);

Output:57.299999237060546875

-----------------------------------------------------------
double b = 57.3;

BigDecimal decimalB = new BigDecimal(b);

System.out.println(decimalB);

Output:57.2999999999999971578290569595992565155029296875

結論:避免直接使用new BigDecimal(double) or new BigDecimal(float)

correct Example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
double c = 57.3;

BigDecimal decimalC = new BigDecimal(Double.toString(c));

System.out.println(decimalC);

Output:57.3

-----------------------------------------------------------
double d = 57.3;

BigDecimal decimalD = BigDecimal.valueOf(d);

System.out.println(decimalD);

Output:57.3

結論:建議使用new BigDecimal(Double.toString(c)) and BigDecimal.valueOf(d)