21

double値からに変換する方法はありますBigIntegerか?

double doubleValue = 64654679846513164.2;
BigInteger bigInteger = (BigInteger) doubleValue;

キャストしようとしましたが、うまくいきませんでした。

4

3 に答える 3

18

BigInteger は、小数ではなく、任意精度の整数を保持するために作成されています。クラスを使用しBigDecimalて double を保持できます。

BigDecimal k = BigDecimal.valueOf(doublevalue);

一般に、Java プリミティブを別のクラスに型キャストすることはできません。私が知っている例外は、 int 値を Integer にキャストできるおよびラッパー クラスNumberなど、 を拡張するクラスです。LongInteger

于 2013-07-31T01:38:03.223 に答える
1

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();
}
于 2022-02-06T06:35:51.830 に答える