将Double转换为Bigdecimal时,值缩小

时间:2018-06-21 22:59:51

标签: java

将Double转换为BigDecimal时遇到的问题是失去了原始值。 我的要求像输入将像Double val = 10435383974769502920d,并想要像10435.383974769502502920那样转换,但低于输出。 我已经尝试过Double BigDecimal ..但没有成功

Double val = 10435383974769502920d;
System.out.println(BigDecimal.valueOf(val).movePointLeft(15));

output : 10435.383974769502

1 个答案:

答案 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));