Как я могу изменить поведение DecimalFormat в зависимости от длины ввода? - PullRequest
8 голосов
/ 13 декабря 2010

Я использую следующий DecimalFormat шаблон:

// Use ThreadLocal to ensure thread safety.
private static final ThreadLocal <NumberFormat> numberFormat =
  new ThreadLocal <NumberFormat>() {
    @Override protected NumberFormat initialValue() {
        return new DecimalFormat("#,##0.00");
    }
};

Выполняет следующие преобразования:

1    -> 1.00
1.1  -> 1.10
1.12 -> 1.12

У меня теперь есть дополнительное требование.

1.123  -> 1.123
1.1234 -> 1.123

Это означает, что когда

  • там меньше двух знаков после запятой, я добавлю два знака после запятой.
  • есть ровно два или три знака после запятой, я ничего не буду делать.
  • есть более трех знаков после запятой, я урежу до трех знаков после запятой.

Можно ли указать это поведение с классом DecimalFormat?

Ответы [ 2 ]

4 голосов
/ 13 декабря 2010
DecimalFormat("#,##0.00#")
1 голос
/ 13 декабря 2010

Вы пытались изменить RoundingMode вашего DecimalFormat экземпляра?

Вызов setRoundingMode(RoundingMode.FLOOR) должен сделать трюк

См. Также setRoundingMode (java.math.RoundingMode)

...