Определите число десятичных разрядов, используя BigDecimal - PullRequest
11 голосов
/ 19 февраля 2010

Мне было интересно иметь следующую getNumberOfDecimalPlace функцию:

System.out.println("0 = " + Utils.getNumberOfDecimalPlace(0));          // 0
System.out.println("1.0 = " + Utils.getNumberOfDecimalPlace(1.0));      // 0
System.out.println("1.01 = " + Utils.getNumberOfDecimalPlace(1.01));    // 2
System.out.println("1.012 = " + Utils.getNumberOfDecimalPlace(1.012));  // 3
System.out.println("0.01 = " + Utils.getNumberOfDecimalPlace(0.01));    // 2
System.out.println("0.012 = " + Utils.getNumberOfDecimalPlace(0.012));  // 3

Могу ли я узнать, как я могу реализовать getNumberOfDecimalPlace, используя BigDecimal?

Следующий код не работает должным образом:

public static int getNumberOfDecimalPlace(double value) {
    final BigDecimal bigDecimal = new BigDecimal("" + value);
    final String s = bigDecimal.toPlainString();
    System.out.println(s);
    final int index = s.indexOf('.');
    if (index < 0) {
        return 0;
    }
    return s.length() - 1 - index;
}

Будет напечатано следующее:

0.0
0 = 1
1.0
1.0 = 1
1.01
1.01 = 2
1.012
1.012 = 3
0.01
0.01 = 2
0.012
0.012 = 3

Однако, для случая 0, 1.0, это не работает хорошо. Я ожидаю, «0» как результат. Но они оказались «0.0» и «1.0». В результате вы получите «1».

Ответы [ 12 ]

0 голосов
/ 19 февраля 2010

Лучший способ получить BigDecimal с указанным количеством десятичных знаков - использовать метод setscale поверх него. Лично мне нравится также использовать метод округления (см. Ссылку ниже): http://java.sun.com/j2se/1.5.0/docs/api/java/math/BigDecimal.html#setScale(int,%20int)

Если вы хотите получить количество десятичных разрядов, которое BigDecimal в настоящее время устанавливает при вызове соответствующего метода scale ().

0 голосов
/ 19 февраля 2010

Как насчет того, чтобы взглянуть на Javadoc BigDecimal. Я не уверен, но я бы попробовал getScale и getPercision.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...