Подтвердить что ты не робот

Показать нулевые нули с использованием DecimalFormat

Я использую DecimalFormat для форматирования удвоений до двух знаков после запятой, например:

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

Любые предложения?

4b9b3361

Ответ 1

Класс DecimalFormat предназначен для преобразования десятичного числового значения в строку. В вашем примере вы берете строку, которая исходит из метода format() и возвращает ее в двойную переменную. Если вы выведете эту двойную переменную, вы не увидите форматированную строку. См. Пример кода ниже и его вывод:

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"

Ответ 2

Попробуйте этот код:

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

Ответ 3

Использовать формат "#.00".

Ответ 4

Вы можете попробовать что-то вроде:

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

Таким образом вы можете обеспечить минимальное количество цифр до или после десятичной дроби

Ответ 5

Попробуйте этот код:

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

Ответ 6

Я нашел свою небольшую тестовую программу полезной и хочу поделиться ею с вами. Наслаждайтесь.

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

Ответ 7

Попробуйте использовать DecimalFormat из "0.00". Согласно JavaDocs, это не будет снимать лишние 0.