0%

使用double构建一个BigDecimal

使用new BigDecimal(double val)得到BigDecimal并不是想像结果一样。以下为测试代码:

1
2
3
4
5
6
7
8
9
import java.math.BigDecimal;

public class BigDecimalTest {
public static void main(String[] args) {
System.out.println("new BigDecimal(\"1.1\") = " + new BigDecimal("1.1"));
System.out.println("new BigDecimal(1.1) = " + new BigDecimal(1.1));
System.out.println("BigDecimal.valueOf(1.1) = " + BigDecimal.valueOf(1.1));
}
}

编译执行,结果为:

1
2
3
new BigDecimal("1.1") = 1.1
new BigDecimal(1.1) = 1.100000000000000088817841970012523233890533447265625
BigDecimal.valueOf(1.1) = 1.1

可以看到new BigDecimal(1.1)的结果不是想要得到的1.1。如果想得到一个精确的BigDecimal那么使用new BigDecimal(String val),即使用一个字符串类型作为参数,如果必须使用double作参数,那么使用BigDecimal valueOf(double val),如BigDecimal.valueOf(1.1)


全文完