使用DecimalFormat在Java中格式化货币字符串

时间:2015-12-22 00:16:18

标签: java currency decimalformat

我需要一个包含double的字符串(类似于14562.34)并对其进行格式化,使其看起来像$ 000,000,00#。## - 。我的意思是$将一直向左,如果没有数字,则上面的0会显示但我确实希望间距在那里。 #s将是数字,如果数字为零,我需要至少0.00才能显示。 ' - '将显示该数字是否为负数(尽管我相信这是我可以在格式化程序的最后处理的东西)。当我尝试做#000; 000,000,00#。##"对于格式化程序,我得到一个格式错误的异常。

有人会有这方面或我做错的提示吗?

以下是示例:

1234.56 - > $ 1,234.56 ______

0 - > $ __________ 0.00

1234567.89 - > $ __ 1,234,567.89

' _'代表一个仍然存在的空间。

感谢。

2 个答案:

答案 0 :(得分:1)

public static void main(String[] args) throws ParseException {
String data = "1234.6";
DecimalFormat df = new DecimalFormat("$0,000,000,000.00");
System.out.println( df.format(Double.parseDouble(data)));
}

注意" 00",意思是两位小数。

如果您使用"#。##" (#表示"可选"数字),它将丢弃尾随零 - 即新的DecimalFormat("#。##")。format(3.0d);只打印" 3"而不是" 3.00"。

编辑: -

如果您想要空格而不是零,可以使用 String.format()方法来实现此目的。 如果小数位数大于最大前导零大小,则返回带有美元符号的双重解析数,否则添加前导空格。

此处长度是在忽略前导空格之后可以添加空格的最大尺寸。

public static String leadingZeros(String s, int length) {
    if (s.length() >= length) return String.format("$%4.2f",Double.valueOf(s));
    else 
        return String.format("$%" + (length-s.length()) + "s%1.2f",  " ",Double.valueOf(s));
    } 

答案 1 :(得分:0)

如果您正在寻找有关如何使用数字格式化货币的详细信息...这是确保数字货币显示的正确区域设置和格式设置的最佳方法。

public String getFormattedCurrencyValue(String number){

   BigDecimal num = new BigDecimal(number);
   NumberFormat nf = NumberFormat.getCurrencyInstance(locale);
   Currency currency = nf.getCurrency();

   String str = StringUtil.replace(
            nf.format(number),
            nf.getCurrency().getSymbol(locale),
            "",false).trim();

   return currency.getCurrencyCode()+str;
}