如何将Apfloat转换为BigDecimal?

时间:2013-11-02 23:25:11

标签: java apfloat

我使用以下代码kBigDecimal

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

Apfloat似乎有intValue()doubleValue()floatValue()等方法,但我无法看到如何将Apfloat转换为BigDecimal }。

1 个答案:

答案 0 :(得分:2)

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

根据您的具体要求,请从以下内容开始:

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

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

另一方面,BigDecimal.valueOf( double)Double.toString( double)具有代表双打的特定逻辑 - >十进制没有虚假的深度十进制。

见:

  • java.math.BigDecimal.BigDecimal(double)

引自Javadoc:

这个构造函数的结果可能有些不可预测。 有人可能会认为写new BigDecimal(0.1) Java创建一个完全等于的BigDecimal 0.1(未缩放的值为1,刻度为1),但它是 实际上等于0.1000000000000000055511151231257827021181583404541015625。 这是因为0.1不能完全表示为a double(或者,就此而言,作为二进制的一部分 任何有限的长度)。因此,正在传递的值 in 到构造函数不完全等于0.1, 尽管如此。