将Double转换为BigDecimal时遇到的问题是失去了原始值。 我的要求像输入将像Double val = 10435383974769502920d,并想要像10435.383974769502502920那样转换,但低于输出。 我已经尝试过Double BigDecimal ..但没有成功
Double val = 10435383974769502920d;
System.out.println(BigDecimal.valueOf(val).movePointLeft(15));
output : 10435.383974769502
答案 0 :(得分:2)
Double val = 10435383974769502920d;
双精度数不能容纳那么多数字。双精度数的精度限制为〜15个十进制数字。失去多余数字的不是BigDecimal
;这是您开始的两倍。
>>> System.out.printf("%f\n", 10435383974769502920d);
10435383974769502000.000000
用字符串构造BigDecimal
以避免丢失精度。
String val = "10435383974769502920";
System.out.println(new BigDecimal(val).movePointLeft(15));