首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正确使用BigDecimal

正确使用BigDecimal
EN

Stack Overflow用户
提问于 2013-03-07 16:14:13
回答 3查看 127关注 0票数 1

我不确定我做得对不对。

我正在做需要尽可能精确的科学计算,所以我正在将现有的Double使用转换为BigDecimal

代码语言:javascript
复制
// before
double tmp = x - (y / z);

// after
BigDecimal tmp = new BigDecimal(
        x.value().subtract(y.value().divide(z.value())).toString());

这是合乎逻辑的还是什么?

EN

回答 3

Stack Overflow用户

发布于 2013-03-07 16:19:41

在将结果转换为BigDecimal之前,您正在对doubles进行算术运算。这样你就不会获得任何精确度。

您应该尽快将每个数字转换为BigDecimal,然后在BigDecimal表示上使用BigDecimals的方法(减法、除法等)进行算术运算。

代码语言:javascript
复制
BigDecimal bdX = new BigDecimal(x);
BigDecimal bdY = new BigDecimal(y);
BigDecimal bdZ = new BigDecimal(z);

BigDecimal tmp = bdX.subtract(bdY.divide(bdZ));
票数 3
EN

Stack Overflow用户

发布于 2013-03-07 16:17:17

BigDecimal有用于所有运算符的方法。您应该改为使用它们。还可以控制(指定)缩放和舍入。

避免使用doulbles,而是从一开始就使用BigDecimal

票数 2
EN

Stack Overflow用户

发布于 2013-03-07 16:26:34

假设x,y和z是双精度

代码语言:javascript
复制
BigDecimal tmp = new BigDecimal(x).subtract(
           new BigDecimal(y).divide(new BigDecimal(z), MathContext.DECIMAL64));

要了解使用MathContext的原因,请参阅BigDecimal.divide API

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15266170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档