简体   繁体   English

使用 DecimalFormat 显示填充零

[英]Show padding zeros using DecimalFormat

I'm using DecimalFormat to format doubles to 2 decimal places like this:我正在使用 DecimalFormat 将双精度格式设置为 2 个小数位,如下所示:

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

It works, but if i have a number like 20, it gives me this:它有效,但如果我有一个像 20 这样的数字,它会给我这个:

20.0

and I want this:我想要这个:

20.00

Any suggestions?有什么建议么?

The DecimalFormat class is for transforming a decimal numeric value into a String. DecimalFormat 类用于将十进制数值转换为字符串。 In your example, you are taking the String that comes from the format( ) method and putting it back into a double variable.在您的示例中,您正在获取来自 format() 方法的 String 并将其放回双变量中。 If you are then outputting that double variable you would not see the formatted string.如果您随后输出该双变量,您将看不到格式化的字符串。 See the code example below and its output:请参阅下面的代码示例及其输出:

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);

Which outputs:哪些输出:

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

Try this code:试试这个代码:

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));

Result:结果:

100.25

1,000.70

10,000.00

使用格式“#.00”。

You can try something like:您可以尝试以下操作:

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

This way you can ensure the minimum number of digits before or after the decimal这样你就可以保证小数点前后的最小位数

Try this code:试试这个代码:

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));

The output is: 10.00 20.00 0.00输出为:10.00 20.00 0.00

I found my small test program useful and want to share it with you.我发现我的小测试程序很有用,想与您分享。 Enjoy.享受。

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);
    }
}

This results in:这导致:

====== 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
=============================================================

Try using a DecimalFormat of "0.00" instead.尝试使用“0.00”的 DecimalFormat 代替。 According to the JavaDocs , this won't strip off the extra 0s.根据JavaDocs ,这不会去除额外的 0。

Just change只是改变

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

with

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM