尝试将DecimalFormat与Locale和可变小数位一起使用

时间:2012-01-16 18:09:28

标签: java decimalformat

我使用小数格式显示不同区域设置的价格。

我的基本格式为:

DecimalFormatSymbols dfs = new DecimalFormatSymbols();
String cur_syl = dfs.getCurrencySymbol().toString();

DecimalFormat df = new DecimalFormat(cur_syl+"0.00");                     
total.setText(df.format(line_total));

这适用于我并显示本地的正确货币符号。但是,有时小数部分会超过2个位置..(因为测量转换的单位(留下一个很小的部分)。如果数量真的是0.005,显示屏显示0.00。我只想显示额外的小数位数如果那里有值。我真的不想显示0.0050000只是为了说明少于一个数量的金额。

我已经完成了大部分的帮助和网络...这对我来说有点困惑,我即将为此做一个花哨的代码,但我确信有一个很好的简单方法我需要什么。

我想显示这样的数字:

.05 = $0.05
.005 = $0.005
.0005 = $0.0005

如果程序显示:$ 0.0005 = $ 0.00则会出现错误。

任何帮助都会非常感激..

1 个答案:

答案 0 :(得分:2)

以下是使用 DecimalFormat的“#”掩码的示例代码。 “#”掩码仅显示该位置中存在的数字。您也可以使用类似#,##0.00的格式在小数的左侧使用它。这样,只有当数字达到数千时,才会显示逗号,但是0将始终显示在1位置。

double line_total0 = 0.5;
double line_total1 = 0.05;
double line_total2 = 0.005;
double line_total3 = 0.0000005;

DecimalFormatSymbols dfs = new DecimalFormatSymbols();
String cur_syl = dfs.getCurrencySymbol().toString();

DecimalFormat df = new DecimalFormat(cur_syl + "0.00############");
System.out.println(df.format(line_total0));
System.out.println(df.format(line_total1));
System.out.println(df.format(line_total2));
System.out.println(df.format(line_total3));

输出:

$0.50
$0.05
$0.005
$0.0000005