OK, ich habe deine Frage noch einmal gelesen. Ich weiß nicht wirklich, warum Sie den Cent-Teil zerhacken wollen (in den USA macht das in Korea oder Japan Sinn, weil sie sie überhaupt nicht benutzen).
Wie auch immer, ich denke nicht, dass es eine gute Idee ist, Cent-Teil nur zu schneiden, aber wenn Sie es tun möchten, ist es so einfach wie mit NumberFormat mit setMaximumIntegerDigits(int).
BTW, ich weiß immer noch nicht, ich weiß, warum durch die Verwendung von Ressourcen-Bundles können Sie NumberFormat nicht verwenden. Sie können immer noch Formatierer in MessageFormat.format()
nennen:
NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance(Locale.US);
currencyFormatter.setMaximumFractionDigits(0);
System.err.println(MessageFormat.format("Some amount: {0}.",
currencyFormatter.format(1d)));
Vorhersagbar es ausdruckt:
Eine gewisse Menge: 1 $.
Wenn Sie die Währung zu halten brauchen, würde ich vorschlagen, mit setCurrency(Currency)
Methode spielen, indem sie lokales Format behalten - Sie diese Frage in Internalisierung Tag fragt sowieso.
Edit: Einschließlich Informationen über Message Fähigkeiten
Wenn Sie benutzerdefinierte Währungsformate für eine Locale verwenden müssen, müssen Sie tatsächlich Message Klasse (regelmäßige statische MessageFormat.format(String, Object...)
wird nicht funktionieren in Web-Anwendungen instanziiert Dafür verwendet es das Standard-Gebietsschema - Locale.getDefault(Locale.Category.FORMAT)
in Java 7 - Server-Gebietsschema, wenn Sie bevorzugen.
Also, was Sie wirklich wollen, ist eine Hilfsmethode zu schreiben (sorry, kein Bonus), die (aus dem Speicher, sorry) in etwa so aussehen:
public static String format(String pattern, Locale locale, Object... args) {
final String emptyPattern = "";
final FieldPosition zero = new FieldPosition(0);
MessageFormat fmt = new MessageFormat(emptyPattern, locale);
StringBuffer buf = new StringBuffer(); // I just love it...
fmt.applyPattern(pattern);
fmt.format(args, buf, zero);
return buf.toString();
}
Aus Performance-Gründen, könnte man denken, Ich erstelle StringBuffer einmal und säubere es dann immer wieder, aber ich überlasse Optimierungen dir selbst.
Sie würden auch einen Bitmuster ändern müssen, und ich werde in einem Moment erklären, warum:
String pattern = "{1}{0,number,\u00A4#}";
Sie müßten den Betrag und das Währungssymbol und links Übersetzer weitergeben, wo das Symbol platzieren und wie man Formatwert für ein Gebietsschema (Vergessen Sie nicht, der Eigenschaftendatei Kommentare hinzuzufügen!).
Gründe, warum Sie die JDK-Version dann nicht verwenden können? Und nebenbei bemerkt: Gibt es einen bestimmten Grund, warum Sie 'NumberFormat.getCurrencyInstance (locale)' nicht verwenden können? –
Es gibt zwei Gründe, warum ich ICU verwenden möchte. Erstens muss unsere Anwendung bestimmte Währungen in verschiedenen Gebietsschemata drucken, was in der JDK-Version nicht möglich ist (die Währung muss unabhängig vom aktuellen Gebietsschema sein). Zweitens gibt es auf der ICU eine Rechtschreibformatierung, die auch in verschiedenen Gebietsschemata gedruckt werden muss. Und ich möchte 'NumberFormat.getCurrencyInstance (locale)' nicht verwenden, da alle meine Nachrichten in ResourceBundles sind. – Marti