问题描述
在使用new BigDecimal 时,发现如果是浮点数new出来的值就会与预期的不符
示例代码
System.out.println(new BigDecimal(0.99));System.out.println(new BigDecimal("0.99"));System.out.println(BigDecimal.valueOf(0.99));System.out.println(new BigDecimal(Double.valueOf(0.99)));System.out.println(new BigDecimal(Double.valueOf(0.99).toString()));
输出结果
0.98999999999999999111821580299874767661094665527343750.990.990.98999999999999999111821580299874767661094665527343750.99
问题原因
查看
BigDecimal(double val)构造函数,看到描述中不建议直接使用,构造函数的结果不可预测。
public BigDecimal(double val) {this(val,MathContext.UNLIMITED);}
解决方案:
方案1:BigDecimal. valueOf(浮点数)
BigDecimal. valueOf(double);
方案2:new BigDecimal(字符串)
String value = Double.toString(double);new BigDecimal(value);
