Java大十进制问题

时间:2011-07-12 16:57:54

标签: java bigdecimal

我正在使用java大小数,如下所示:

class test bigDecimal{

private BigDecimal decimalResult;


    public boolean iterate(String value) {
        if (value == null) {
            return true;
        }

        System.out.println("value is: " + value);

        BigDecimal temp = new BigDecimal(value);

        System.out.println("temp val is: " + temp);
        if (decimalResult == null) {
            decimalResult = temp;
        } else {
            decimalResult = decimalResult.add(temp);
        }

        return true;
    }

}

我用来创建大十进制的所有字符串的比例为6.例如:123456.678000,456789.567890

但是如果我给出一个大的字符串列表作为输入并检查总和,我得到小数点后8位数的输出。例如。类似于:2939166.38847228。

我想知道为什么BigDecimal会改变这种规模?我的所有输入都是6分。

任何意见都表示赞赏。 -Thanks

3 个答案:

答案 0 :(得分:6)

请阅读BigDecimal的javadoc: http://download.oracle.com/javase/6/docs/api/java/math/BigDecimal.html 在内部,所有BigDecimal都转换为某种内部格式。

如果您想获得特定格式,则必须将其称为合适格式。 您可以使用scaleByPowerOfTen(int n),例如n = 6

哦,顺便说一句,永远不要使用new BigDecimal,而是使用BigDecimal.valueOf

编辑:

NumberFormat numberFormat = NumberFormat.getInstance(); // use a locale here String formated = df.format(myUnformatedBigDecimal);

答案 1 :(得分:0)

这不是内部代表的问题。这样BigDecimal.toString()就可以了。它调用layoutChars(true) - 格式化数字的私有方法。它的硬编码等级为6.但我认为无所谓。你真的不需要品脱所有数字。 BigDecimal提供计算高精度数字的能力。这就是它的作用。

答案 2 :(得分:0)

大十进制给出的是精确的输出,但是该输出比6位更准确,因此获得6位输出的最佳方法是通过将BigDecimal转换为字符串并执行以下操作来删除最后2个小数: >

    String myOutput = new 
    BigDecimal("1000.12345678").toString();
    myOutput = myOutput.substring(myOutput.length-2, 
     myOutput.length);