3

我正在使用以下代码,其中ka BigDecimal

Apfloat power = ApfloatMath.pow(new Apfloat(-1), new Apfloat(k));

Apfloat似乎有类似intValue(),的方法doubleValue()floatValue()但我看不到如何转换ApfloatBigDecimal.

4

1 回答 1

2

BigDecimal 最好从字符串或使用BigDecimal.valueOf( double)静态构造函数生成。

对于您的特定要求,请从以下内容开始:

public static asBigDecimal (Apfloat val) {
    return BigDecimal.valueOf( val.doubleValue());
}

new BigDecimal(double)特别要避免调用,因为它会生成浮点位的精确十进制表示,并且可能有些不可预测地需要大量十进制数字才能这样做。

另一方面,BigDecimal.valueOf( double)Double.toString( double)​​有特定的逻辑来表示双精度 -> 十进制,而没有虚假的深度十进制化。

看:

  • java.math.BigDecimal.BigDecimal(double)

引用Javadoc:

此构造函数的结果可能有些不可预测。有人可能会假设new BigDecimal(0.1)用 Java 编写的 aBigDecimal正好等于 0.1(未缩放的值 1,比例为 1),但它实际上等于 0.1000000000000000055511151231257827021181583404541015625。这是因为 0.1 不能完全表示为 a double(或者,就此而言,不能表示为任何有限长度的二进制分数)。因此,传递 给构造函数值并不完全等于 0.1,尽管看起来如此。

于 2013-11-03T00:09:16.963 回答