2010-12-13 1 views
8

Я использую следующий DecimalFormat шаблон:Как изменить поведение 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?

ответ

4
DecimalFormat("#,##0.00#") 
+0

Это действительно элегантное решение! –