Java 有关将double转化为BigDecimal要先将double转化为字符串
1. 实验
public class Test01 {
public static void main(String[] args) {
double d = 0.123456789123456789123456789;
System.out.println(new Double(d));
System.out.println(new BigDecimal(d));
System.out.println(new BigDecimal(String.valueOf(d)));
}
}
2. 分析
- double本来就不是准确数,它的值是计算出来的,计算出来后选出15~16位成为double的值
- BigDecimal的精度比double大,这样double计算出来的多余的数值就被存储到了BigDecimal中,导致BigDecimal中有多余的小数位
- 然后String.valueOf()这个方法让double表示的十进制数就精确到15~16位,然后再赋值给BigDecimal
- 这样就能保证BigDecimal的值没有多余的小数位
3. 结论
- 在将double的值转化给BigDecimal时,要先将其转化位String类型,以保证它的精度
- 同理,如果要将double转化为其它比double精度大的类型的时候,也需要对其进行同样的处理