作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我使用以下代码,其中 k
是一个 BigDecimal
:
Apfloat power = ApfloatMath.pow(new Apfloat(-1), new Apfloat(k));
Apfloat
似乎有 intValue()
、doubleValue()
、floatValue()
之类的方法,但我看不到如何将 Apfloat
转换为 BigDecimal
。
最佳答案
BigDecimals 最好从字符串或使用 BigDecimal.valueOf(double)
静态构造函数生成。
对于您的具体要求,请从以下内容开始:
public static asBigDecimal (Apfloat val) {
return BigDecimal.valueOf( val.doubleValue());
}
特别要避免调用 new BigDecimal(double)
,因为它会生成精确 浮点位的十进制表示形式,而且可能需要大量的小数这样做的数字。
另一方面,BigDecimal.valueOf(double)
和 Double.toString(double)
有特定的逻辑来表示 double -> 小数,没有虚假的深度小数化。
参见:
java.math.BigDecimal.BigDecimal(double)
引用自 Javadoc:
此构造函数的结果可能有些不可预测。人们可能会假设将 new BigDecimal(0.1)
写成Java 创建一个 BigDecimal
,它正好等于0.1(未缩放的值为 1,缩放为 1),但它是实际上等于 0.1000000000000000055511151231257827021181583404541015625。这是因为 0.1 不能精确表示为double
(或者,就此而言,作为任何有限长度)。因此,传递的值in 到构造函数不完全等于 0.1,尽管有外表。
关于java - 如何将 Apfloat 转换为 BigDecimal?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19748069/
我是一名优秀的程序员,十分优秀!