正确使用BigDecimal

时间:2013-03-07 08:14:13

标签: java double bigdecimal

我不确定我是否正确行事。

我正在做尽可能准确的科学计算,因此我将Double的现有用法转换为BigDecimal

// before
double tmp = x - (y / z);

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

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

3 个答案:

答案 0 :(得分:3)

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

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

BigDecimal bdX = new BigDecimal(x);
BigDecimal bdY = new BigDecimal(y);
BigDecimal bdZ = new BigDecimal(z);

BigDecimal tmp = bdX.subtract(bdY.divide(bdZ));

答案 1 :(得分:2)

BigDecimal为所有运营商提供了方法。你应该使用它们。您还可以控制(指定)比例和舍入。

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

答案 2 :(得分:0)

假设x,y和z是双打

BigDecimal tmp = new BigDecimal(x).subtract(
           new BigDecimal(y).divide(new BigDecimal(z), MathContext.DECIMAL64));

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