21

无论如何要从doublevalue 转换为BigInteger

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

我尝试投射它,但它没有用。

4

3 回答 3

50

如果要将 double 的整数部分存储到 aBigInteger中,则可以将其转换为 a BigDecimal然后再转换为 a BigInteger

BigInteger k = BigDecimal.valueOf(doubleValue).toBigInteger();
于 2014-01-18T18:09:14.873 回答
18

BigInteger 用于保存任意精度的整数,而不是小数。您可以使用BigDecimal该类来举行双打。

BigDecimal k = BigDecimal.valueOf(doublevalue);

通常,您不能将 Java 原语类型强制转换为另一个类。我知道的例外是扩展类Number,例如LongInteger包装类,它们允许您将 int 值转换为 Integer,等等。

于 2013-07-31T01:38:03.223 回答
1

转换 a Double-> 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 回答