is there anyway to convert from Double to BigInteger?
If you want to store the integral part of the double into a BigInteger
, then you can convert it into a BigDecimal
and then into a BigInteger
:
BigInteger k = BigDecimal.valueOf(doubleValue).toBigInteger();
BigInteger is made for holding arbitrary precision integer numbers, not decimals. You can use the BigDecimal
class to hold a double.
BigDecimal k = BigDecimal.valueOf(doublevalue);
In general, you cannot type cast a Java primitive into another class. The exceptions that I know about are the classes extending Number
, such as the Long
and Integer
wrapper classes, which allow you to cast an int value into an Integer, and so on.
The process of converting a Double
-> BigDecimal
-> BigInteger
is intensive. I propose the below: (about 500% faster)
BigInteger m = DoubleToBigInteger(doublevalue);
static BigInteger DoubleToBigInteger(double testVal) {
long bits = Double.doubleToLongBits(testVal);
int exp = ((int)(bits >> 52) & 0x7ff) - 1075;
BigInteger m = BigInteger.valueOf((bits & ((1L << 52)) - 1) | (1L << 52)).shiftLeft(exp);
return (bits >= 0)? m : m.negate();
}