我使用以下代码k
为BigDecimal
:
Apfloat power = ApfloatMath.pow(new Apfloat(-1), new Apfloat(k));
Apfloat
似乎有intValue()
,doubleValue()
,floatValue()
等方法,但我无法看到如何将Apfloat
转换为BigDecimal
}。
答案 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,
尽管如此。