如何格式化此字符串

时间:2014-10-13 10:38:54

标签: java number-formatting

我有一笔金额

Long amount=83000;

我需要将其格式化为$83.000,该怎么做?

NumberFormat formatter = NumberFormat.getCurrencyInstance(new Locale("en", "US"));

String moneyString = formatter.format(amount);

System.out.println(moneyString);

我得到了$83000.00,但我希望我的观点在最后一位数字之前

6 个答案:

答案 0 :(得分:3)

这可能会对你有帮助,

 DecimalFormat myFormatter = new DecimalFormat("$###,###.###");
 String output = myFormatter.format(amount);
 System.out.println(output);

答案 1 :(得分:0)

您使用的是错误的课程。 NumberFormatter将为Locale指定特定格式。来自API文档:

  

您的代码可以完全独立于小数点,千位分隔符的区域设置约定,甚至是使用的特定小数位数,或者数字格式是否为十进制数。

如果您打算输出相同的字符串,无论操作系统的当前语言环境如何,您都应该查看DecimalFormat

通过创建格式化字符串(例如"$#,##0")并传递DecimalFormatSymbols的实例,您将分组字符设置为'.',您将实现预期的输出而不会产生黑客攻击。

答案 2 :(得分:0)

这个怎么样?

long num = 83000;
DecimalFormat df = new DecimalFormat("##,###");
String toReplace = df.format(83000).toString();
System.out.println(toReplace.replace(",", "."));

答案 3 :(得分:-1)

这应该有效:

DecimalFormatSymbols symbols = new DecimalFormatSymbols(new Locale("en", "US"));
symbols.setDecimalSeparator(',');
symbols.setGroupingSeparator('.'); 
DecimalFormat df = new DecimalFormat("$#,##0", symbols);
System.out.println(df.format(83000L));
//$83.000

答案 4 :(得分:-2)

也许你是这个意思?

public static void main(String[] args) {
    Long amount = 67890L;
    NumberFormat formatter = NumberFormat.getCurrencyInstance(new Locale("en", "US"));
    String moneyString = formatter.format((double) amount / 1000);
    System.out.println(moneyString);
}

此代码将打印:

$ 67.89

答案 5 :(得分:-2)

使用BigDecimal格式代替Long

BigDecimal bd = BigDecimal.valueOf(amount, 3);
NumberFormat formatter = NumberFormat.getCurrencyInstance(new Locale("en","US"));
formatter.setMinimumFractionDigits(3);
String moneyString = formatter.format(bd);    
System.out.println(moneyString);