我正在使用以下代码,其中k
a BigDecimal
:
Apfloat power = ApfloatMath.pow(new Apfloat(-1), new Apfloat(k));
Apfloat
似乎有类似intValue()
,的方法doubleValue()
,floatValue()
但我看不到如何转换Apfloat
为BigDecimal
.
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,尽管看起来如此。