double値からに変換する方法はありますBigIntegerか?
double doubleValue = 64654679846513164.2;
BigInteger bigInteger = (BigInteger) doubleValue;
キャストしようとしましたが、うまくいきませんでした。
double値からに変換する方法はありますBigIntegerか?
double doubleValue = 64654679846513164.2;
BigInteger bigInteger = (BigInteger) doubleValue;
キャストしようとしましたが、うまくいきませんでした。
BigInteger は、小数ではなく、任意精度の整数を保持するために作成されています。クラスを使用しBigDecimalて double を保持できます。
BigDecimal k = BigDecimal.valueOf(doublevalue);
一般に、Java プリミティブを別のクラスに型キャストすることはできません。私が知っている例外は、 int 値を Integer にキャストできるおよびラッパー クラスNumberなど、 を拡張するクラスです。LongInteger
Doublea -> BigDecimal->を変換するプロセスBigIntegerは集中的です。以下を提案します:(約500%高速)
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();
}