2010-12-13 9 views
8

Używam następujący DecimalFormat wzoru:Jak mogę zmienić zachowanie DecimalFormat na podstawie długości wejściowej?

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

ten wykonuje następujące konwersje:

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

mam teraz dodatkowy wymóg.

1.123 -> 1.123 
1.1234 -> 1.123 

Oznacza to, że gdy

  • jest mniej niż dwa miejsca po przecinku, będę "pad" do dwóch miejsc po przecinku.
  • są dokładnie dwa lub trzy miejsca po przecinku, nic nie zrobię.
  • jest więcej niż trzy miejsca po przecinku, obcię do trzech miejsc po przecinku.

Czy mogę określić to zachowanie dla klasy DecimalFormat?

Odpowiedz

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

To jest naprawdę eleganckie rozwiązanie! –

Powiązane problemy