Java Большая Десятичная проблема - PullRequest
1 голос
/ 12 июля 2011

Я использую большое десятичное число 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.

Любые отзывы приветствуются.-Спасибо

Ответы [ 2 ]

6 голосов
/ 12 июля 2011

Пожалуйста, прочитайте Javadoc для BigDecimal: http://download.oracle.com/javase/6/docs/api/java/math/BigDecimal.html Внутренне все BigDecimals конвертируются в некоторый внутренний формат.

Если вы хотите получить определенный формат, вы должны назвать его соответствующим. Вы можете использовать scaleByPowerOfTen(int n) с n = 6, например

Да, и, кстати, никогда не используйте new BigDecimal, вместо этого используйте BigDecimal.valueOf.

EDIT:

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

0 голосов
/ 12 июля 2011

Это не проблема внутреннего представительства. Таким образом, BigDecimal.toString () работает. Он вызывает layoutChars (true) - закрытый метод, который форматирует число. Он имеет жестко закодированную шкалу 6. Но я думаю, что это не имеет значения. Вам действительно не нужно пинать все цифры. BigDecimal предоставляет возможность рассчитывать числа высокой точности. Вот что он делает.

...