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

Hei*_*erg 0 java double biginteger

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

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

value==123456789123456790000000000

Expected output: 123456789123456789123456789
Run Code Online (Sandbox Code Playgroud)

bhs*_*cer 6

您的第一行正在失去所有精度.

double doub = 123456789123456789123456789d;
System.out.println(doub);
Run Code Online (Sandbox Code Playgroud)

将打印以下内容:

1.2345678912345679E26
Run Code Online (Sandbox Code Playgroud)

哪个等于你的

123456789123456790000000000
Run Code Online (Sandbox Code Playgroud)

原因是123456789123456789123456789无法用双精度64位IEEE 754浮点精确表示.因此,您实际上从来没有将值123456789123456789123456789转换为BigInteger.如果您将值作为String,则可以将其转换为BigInteger,如下所示:

BigInteger b = new BigInteger("123456789123456789123456789");
Run Code Online (Sandbox Code Playgroud)