需要将double值转换为大整数或长整数。尝试使用大整数,但转换后的值与原始值不同。
double doub = 123456789123456789123456789d;
BigDecimal bd = BigDecimal.valueOf(doub);
System.out.println("value=="+bd.toBigInteger());
value==123456789123456790000000000
Expected output: 123456789123456789123456789
答案 0 :(得分:6)
你的第一行正在失去所有的精确度。
double doub = 123456789123456789123456789d;
System.out.println(doub);
将打印以下内容:
1.2345678912345679E26
哪个等于你的
123456789123456790000000000
原因是123456789123456789123456789无法使用双精度64位IEEE 754浮点精确表示。因此,您实际上从来没有将值123456789123456789123456789转换为BigInteger。如果您将值作为String,则可以将其转换为BigInteger,如下所示:
BigInteger b = new BigInteger("123456789123456789123456789");