我有一个丑陋的打印方法,它将长正则表达式作为String。必须有一个更简单的解决方案。
// output is in dollars
String formatString = "%1$-20d%2$-20.2f%3$-20.2f%4$.2f,%5$.2f,%6$.2f\n";
printf(formatString, paymentNumber++, BigDecimal.ZERO, BigDecimal.ZERO,
(amountBorrowed.divide(new BigDecimal("100"))),
(totalPayments.divide(new BigDecimal("100"))),
(totalInterestPaid.divide(new BigDecimal("100"))));
数字格式是否保持我的大十进制精度?实际的printf方法如下。
private static void printf(String formatString, Object... args) {
try {
if (console != null) {
console.printf(formatString, args);
} else {
System.out.print(String.format(formatString, args));
}
} catch (IllegalFormatException e) {
System.out.print("Error printing...\n");
}
}
我知道这太可怕了。有人想到更好的方法吗?
答案 0 :(得分:1)
您可以使用NumberFormat#getCurrencyInstance(Locale)
格式化BigDecimal
的货币。以下是使用美元(使用美国语言环境)格式化格式的示例:
BigDecimal amount = new BigDecimal("2.5");
NumberFormat formatter = NumberFormat.getCurrencyInstance(Locale.US);
String amountInDollarForm = formatter.format(amount);
System.out.println(amountInDollarForm); // prints $2.50
有关详细信息,请访问the java.text.NumberFormat文档。