如何将double值转换为大整数或长整数

时间:2018-04-16 03:18:41

标签: java double biginteger

需要将double值转换为大整数或长整数。尝试使用大整数,但转换后的值与原始值不同。

double doub = 123456789123456789123456789d;
BigDecimal bd = BigDecimal.valueOf(doub);
System.out.println("value=="+bd.toBigInteger());

value==123456789123456790000000000

Expected output: 123456789123456789123456789

1 个答案:

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