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
など、 を拡張するクラスです。Long
Integer
Double
a -> 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();
}