2010-12-13 5 views
8

Ich bin mit den folgenden DecimalFormat Mustern:Wie kann ich das DecimalFormat-Verhalten basierend auf der Eingabedauer ändern?

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

Die folgenden Konvertierungen durchführt:

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

Ich habe jetzt eine zusätzliche Anforderung.

1.123 -> 1.123 
1.1234 -> 1.123 

Das bedeutet, dass, wenn

  • gibt es weniger als zwei Dezimalstellen, ich will "pad" auf zwei Dezimalstellen.
  • gibt es genau zwei oder drei Dezimalstellen, ich werde nichts tun.
  • gibt es mehr als drei Dezimalstellen, ich werde auf drei Dezimalstellen abgeschnitten.

Kann ich dieses Verhalten mit der Klasse DecimalFormat angeben?

Antwort

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

, die wirklich eine elegante Lösung ist! –