web-dev-qa-db-ja.com

DecimalFormatを使用してパディングゼロを表示

DecimalFormatを使用して、次のようにdoubleを小数点以下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

助言がありますか?

33
mportiz08

DecimalFormatクラスは、10進数値を文字列に変換するためのものです。この例では、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"
35
Doug Porter

このコードを試してください:

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
14

次のようなものを試すことができます:

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

これにより、小数の前後の最小桁数を確保できます

8
coolbootgeek

形式「#.00」を使用します。

7
ZZ Coder

このコードを試してください:

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.0020.00 0.00

3
Vinay

私の小さなテストプログラムが便利だと感じたので、それをあなたと共有したいと思います。楽しい。

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
=============================================================
2
Dimitri Dewaele

代わりに「0.00」のDecimalFormatを使用してみてください。 JavaDocs によると、これは余分な0を取り除きません。

0
saleemshafi