java - BigDecimal 精度问题?

标签 java precision bigdecimal trailing

我正在编写一个程序,其中我必须重复乘以两个 BigDecimal

第 27 次迭代后,我得到:

0.905225895893387921845435055445776361046057346344145563957027726

使用此数字进行任何进一步计算(BigDecimal * 0.182365681285)都会导致尾随零。所以下一次迭代返回: 0.905225895893387921845435055445776361046057346344145563957027726000000000000

之后的迭代返回: 0.9052258958933879218454350554457763610460573463441455639570277260000000000000000000000000

等等..

<小时/>

所以我想知道这是否是由于 BigDecimal 的一些精度问题造成的。

感谢任何帮助

编辑:我被要求发布我的代码。我可以复制粘贴我拥有的几页,但这是我迄今为止所拥有内容的非常准确的表示:

BigDecimal range = new BigDecimal(0.0012440624293146346);
for(int i = 0; i < 50 ; i++){
    low = low.multiply(range);
}

最佳答案

乘法方法创建一个 BigDecimal,其小数位数等于第一个操作数的小数位数 + 第二个操作数的小数位数,即使这会导致尾随零。要去除尾随零,请使用... stripTrailingZeros() .

关于java - BigDecimal 精度问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15455862/

相关文章:

Ruby 大十进制小数点后有 2 个数字

java - 大十进制下溢

java - 关于一个好的 Java 构建工具的建议,与 Eclipse 很好地集成

java - 通用接口(interface)数组

Java 泛型比较 |实现比较

python - 精度可变的百分比

java - Hibernate 中对所有表的所有查询的通用条件限制

python - 拆分 Pandas 列中的 float 列表后获取完整的小数位精度

c - C 中 arcsin 的近似

java - 使用汇率转换货币