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)
您的第一行正在失去所有精度.
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)