괄호가 아닌 마이너스 부호가있는 음수 USD 형식 (Java)
-
20-09-2019 - |
문제
어떻게 내가 가질까 NumberFormat.getCurrencyInstance()
마이너스 부호로 음수 USD 통화 값을 인쇄하려면?
다른 팁
반환 된 소수판을 약간 조정해야합니다. NumberFormat.getCurrencyInstance()
로케일 독립적 인 방식으로 수행합니다. 다음은 내가 한 일입니다 (Android에서 테스트) :
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()
모든 시스템에 대한 모든 로케일에 대한 가치를 반환 할 수는 없지만 주요 시스템에는 효과가 있어야합니다 (그리고 자체적으로 합리적인 폴백이 있다고 생각하므로 아무것도 할 필요는 없습니다).
다음은 Java 클래스 또는 FMT : FormatNumber JSTL 태그를 통해 항상 사용하게됩니다.
DecimalFormat format = new DecimalFormat("$#,##0.00;$-#,##0.00");
String formatted = format.format(15.5);
항상 최소 $ 0.00을 생산하며 표시 될 때 일관성이 있습니다. 또한 필요한 경우 수천 명의 분리기가 포함되어 있습니다. 요건이라면 마이너스 부호를 달러 표지판 앞에서 옮길 수 있습니다.
자신만의 것을 만드는 것이 가장 좋습니다 DecimalFormat
기본값에 의존하지 않고 특정 형식을 원한다면.
편집하다: 아마도 numberformat.getCurrencyInstance ()의 결과를 시전 할 수도 있습니다. DecimalFormat
선호도에 맞게 조정하십시오.
노력하다:
NumberFormat.getCurrencyInstance(Locale.CANADA);
NumberFormat.getCurrencyInstance(Locale.UK);
POI가 Excel Currency 형식의 첫 번째 옵션을 지원하는 것을 거부하는 이유는 저를 넘어선 것입니다!
통화 기호의 도입으로 최종 셀 값이 숫자가되지 않기 때문에 화폐에 대한 소수판을 사용하는 것을 좋아하지 않습니다. 주요 금융 기관에서 일하면서이 서식 문제를 해결해야했습니다. 이 변화의 핵심 아이디어는 POI가 합리적이지 않고 Excel의 기본 옵션을 포괄적으로 지원하기 때문에 코드에 침투하고 핵심에서 값을 변경할 것입니다. 다음은 내 해결 방법입니다.
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!!!");
}
}
}