使用DecimalFormat显示填充零

时间:2009-11-16 02:27:24

标签: java formatting decimalformat

我正在使用DecimalFormat将双精度格式化为2位小数,如下所示:

DecimalFormat dec = new DecimalFormat("#.##");
double rawPercent = ( (double)(count.getCount().intValue()) / 
                            (double)(total.intValue()) ) * 100.00;
double percentage = Double.valueOf(dec.format(rawPercent));

它有效,但是如果我有一个像20这样的数字,它就会给我这个:

20.0

我想要这个:

20.00

有什么建议吗?

8 个答案:

答案 0 :(得分:35)

DecimalFormat类用于将十进制数值转换为String。在您的示例中,您将获取来自format()方法的String并将其放回到double变量中。如果您正在输出该双变量,则不会看到格式化的字符串。请参阅下面的代码示例及其输出:

int count = 10;
int total = 20;
DecimalFormat dec = new DecimalFormat("#.00");
double rawPercent = ( (double)(count) / (double)(total) ) * 100.00;

double percentage = Double.valueOf(dec.format(rawPercent));

System.out.println("DF Version: " + dec.format(rawPercent));
System.out.println("double version: " + percentage);

哪个输出:

"DF Version: 50.00"
"double version: 50.0"

答案 1 :(得分:14)

试试这段代码:

BigDecimal decimal = new BigDecimal("100.25");

BigDecimal decimal2 = new BigDecimal("1000.70");

BigDecimal decimal3 = new BigDecimal("10000.00");

DecimalFormat format = new DecimalFormat("###,###,###,###,###.##");

format.setDecimalSeparatorAlwaysShown(true);

format.setMinimumFractionDigits(2);

System.out.println(format.format(decimal));

System.out.println(format.format(decimal2));

System.out.println(format.format(decimal3));

结果:

100.25

1,000.70

10,000.00

答案 2 :(得分:8)

您可以尝试以下内容:

DecimalFormat df = new DecimalFormat("0.000000");
df.setMinimumFractionDigits(0);
df.setMinimumIntegerDigits(2);

这样可以确保小数点前后的最小位数

答案 3 :(得分:7)

使用格式“#.00”。

答案 4 :(得分:3)

试试这段代码:

int count = 10;
int total = 20;
int another=0;
DecimalFormat df = new DecimalFormat("0.00");

System.out.println(df.format(count));
System.out.println(df.format(total ));
System.out.println(df.format(another));

输出是: 10.00 20.00 0.00

答案 5 :(得分:2)

我发现我的小测试程序很有用,并希望与您分享。享受。

package be.softwarelab.numbers;

import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.Locale;

public class DecimalNumbers {

    private static final double ZERO = 0;
    private static final double TEN = 10.0;
    private static final double PI = Math.PI;                           // 3.141592653589793;
    private static final double MILLIONS = Math.E * Math.pow(10, 6);    // 2718281.828459045;
    private static final double NINERS = 9999999.99999;

    public static void main(String[] args) {

        String format01 = "#.#";
        String format02 = "0.#";
        String format03 = "#.0";
        String format04 = "0.0";
        String format05 = "##.#";
        String format06 = "00.#";

        String formatAll = "###,###.###";
        String formatLong = "#.#########";  

        System.out.println("====== ZERO =================================================");
        showResult(ZERO, format01, Locale.US);
        showResult(ZERO, format02, Locale.US);
        showResult(ZERO, format03, Locale.US);
        showResult(ZERO, format04, Locale.US);
        showResult(ZERO, format05, Locale.US);
        showResult(ZERO, format06, Locale.US);
        System.out.println("====== TEN  =================================================");
        showResult(TEN, format01, Locale.US);
        showResult(TEN, format02, Locale.US);
        showResult(TEN, format03, Locale.US);
        showResult(TEN, format04, Locale.US);
        showResult(TEN, format05, Locale.US);
        showResult(TEN, format06, Locale.US);
        System.out.println("====== PI   =================================================");
        showResult(PI, format01, Locale.US);
        showResult(PI, format02, Locale.US);
        showResult(PI, format03, Locale.US);
        showResult(PI, format04, Locale.US);
        showResult(PI, format05, Locale.US);
        showResult(PI, format06, Locale.US);
        System.out.println("====== MILLIONS =============================================");
        showResult(MILLIONS, formatAll, Locale.US);
        showResult(MILLIONS, formatAll, Locale.GERMANY);
        showResult(MILLIONS, formatAll, Locale.FRANCE);
        showResult(MILLIONS, formatAll, new Locale("nl", "BE"));
        System.out.println("====== NINERS   =============================================");
        showResult(NINERS, format01, Locale.US);
        showResult(NINERS, format02, Locale.US);
        showResult(NINERS, format03, Locale.US);
        showResult(NINERS, format04, Locale.US);
        showResult(NINERS, format05, Locale.US);
        showResult(NINERS, format06, Locale.US);
        showResult(NINERS, formatLong, Locale.US);
        System.out.println("=============================================================");
    }

    public static void showResult(double number, String format, Locale locale) {
        // Using a Locale to see the differences between regions.
        DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(locale);
        DecimalFormat formatter = new DecimalFormat (format, otherSymbols);

        // Create the String result
        String output = formatter.format(number);

        // Format the output for a nice presentation.
        System.out.format("    %s %20s %11s = %20s\n", locale, number, format, output);
    }
}

这导致:

====== ZERO =================================================
en_US                  0.0         #.# =                    0
en_US                  0.0         0.# =                    0
en_US                  0.0         #.0 =                   .0
en_US                  0.0         0.0 =                  0.0
en_US                  0.0        ##.# =                    0
en_US                  0.0        00.# =                   00
====== TEN  =================================================
en_US                 10.0         #.# =                   10
en_US                 10.0         0.# =                   10
en_US                 10.0         #.0 =                 10.0
en_US                 10.0         0.0 =                 10.0
en_US                 10.0        ##.# =                   10
en_US                 10.0        00.# =                   10
====== PI   =================================================
en_US    3.141592653589793         #.# =                  3.1
en_US    3.141592653589793         0.# =                  3.1
en_US    3.141592653589793         #.0 =                  3.1
en_US    3.141592653589793         0.0 =                  3.1
en_US    3.141592653589793        ##.# =                  3.1
en_US    3.141592653589793        00.# =                 03.1
====== MILLIONS =============================================
en_US    2718281.828459045 ###,###.### =        2,718,281.828
de_DE    2718281.828459045 ###,###.### =        2.718.281,828
fr_FR    2718281.828459045 ###,###.### =        2 718 281,828
nl_BE    2718281.828459045 ###,###.### =        2.718.281,828
====== NINERS   =============================================
en_US        9999999.99999         #.# =             10000000
en_US        9999999.99999         0.# =             10000000
en_US        9999999.99999         #.0 =           10000000.0
en_US        9999999.99999         0.0 =           10000000.0
en_US        9999999.99999        ##.# =             10000000
en_US        9999999.99999        00.# =             10000000
en_US        9999999.99999 #.######### =        9999999.99999
=============================================================

答案 6 :(得分:0)

请尝试使用“0.00”的DecimalFormat。根据{{​​3}},这不会剥夺额外的0。

答案 7 :(得分:0)

只是改变

DecimalFormat dec = new DecimalFormat("#.##");

使用

DecimalFormat dec = new DecimalFormat("#.00");