我需要一个包含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
' _'代表一个仍然存在的空间。
感谢。
答案 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;
}