Format negativer Betrag in Höhe von USD mit einem Minuszeichen, nicht Klammern (Java)
-
20-09-2019 - |
Frage
Wie erhalte ich NumberFormat.getCurrencyInstance()
negative USD Währungswerte mit einem Minuszeichen drucken?
Lösung 6
Da ich dieses Problem wieder konfrontiert, habe ich einige der Forschung und fand eine elastischere Lösung durch einen bereitgestellt ICU
NumberFormatter
.withLocale(...)
.unit(Currency.getInstance("USD"))
.sign(SignDisplay.AUTO) // "123", "0", and "-123"
.format(123)
.toString();
Überprüfen Sie die API-Dokumentation von NumberFormatter für weitere Details.
Andere Tipps
Es erfordert ein wenig Gefummel der DecimalFormat von NumberFormat.getCurrencyInstance()
kehrte er in einer locale-unabhängige Weise zu tun. Hier ist, was ich habe (auf Android getestet):
DecimalFormat formatter = (DecimalFormat)NumberFormat.getCurrencyInstance();
String symbol = formatter.getCurrency().getSymbol();
formatter.setNegativePrefix(symbol+"-"); // or "-"+symbol if that's what you need
formatter.setNegativeSuffix("");
IIRC, Currency.getSymbol()
kann keinen Wert für alle Schauplätze für alle Systeme zurückkehren, aber es sollte für die wichtigsten diejenigen arbeiten (und ich denke, es ist eine vernünftige Rückfall auf seine eigene hat, so sollte man nichts zu tun haben)
Hier ist ein ich immer in einer Java-Klasse entweder am Ende oder über das fmt: format jstl Tag:
DecimalFormat format = new DecimalFormat("$#,##0.00;$-#,##0.00");
String formatted = format.format(15.5);
Es produziert immer mindestens ein $ 0,00 und konsistent ist, wenn angezeigt. Tausende seperators beinhaltet auch, wo nötig. Sie können auf das Minuszeichen vor dem Dollarzeichen bewegen, wenn die Ihre Anforderung ist.
Es ist wahrscheinlich am besten Ihre eigene DecimalFormat
Edit:. Sie könnten wahrscheinlich auch das Ergebnis der NumberFormat.getCurrencyInstance werfen (), um DecimalFormat
und stellen Sie es Ihren Wünschen
Versuchen Sie:
NumberFormat.getCurrencyInstance(Locale.CANADA);
NumberFormat.getCurrencyInstance(Locale.UK);
Warum poi WEIGERT die erste Option in Excel-Währung zu stützen Formatierung ist mir!
Ich weiß nicht, wie die DecimalFormat für Währung verwenden, weil Ihr Endzelle Wert ein nicht-numerische mit der Einführung des Währungssymbols wird. Während für ein großes Finanzinstitut arbeitet, wurde ich mit der Lösung dieses Problems Formatierung beauftragt. Der Kerngedanke dieser Änderung ist, weil POI, vernünftig zu sein verweigert und hat eine umfassende Unterstützung von Excel nativen Optionen, werde ich ihren Code infiltrieren und ihre Werte im Kern verändern. Das Folgende ist meine Abhilfe:
private static final String CURRENCY_FORMAT_OVERRIDE = "\"$\"#,##0.00_);-\"$\"#,##0.00";
private static final String CURRENCY_FORMAT_TARGET = "\"$\"#,##0.00_);(\"$\"#,##0.00)";
static { // static class level initializer
Field field = org.apache.poi.ss.usermodel.BuiltinFormats.class.getDeclaredField("_formats");
field.setAccessible(true);
String[] _formats = (String[])field.get(new org.apache.poi.ss.usermodel.BuiltinFormats());
for(int i = 0; i < _formats.length; ++i) {
if(_formats[i].equals(CURRENCY_FORMAT_TARGET)) {
_formats[i]=CURRENCY_FORMAT_OVERRIDE;
System.out.println("TAKE THAT, POI!!!");
}
}
}