utilizar usar representar redondeo redondear numero float decimales como colocar java formatting decimalformat

usar - redondear un numero float en java



Mostrar ceros de relleno usando DecimalFormat (7)

Encontré útil mi pequeño programa de prueba y quiero compartirlo con ustedes. Disfrutar.

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

Esto resulta en:

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

Estoy usando DecimalFormat para formatear dobles a 2 decimales como este:

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

Funciona, pero si tengo un número como 20, me da esto:

20.0

y quiero esto:

20.00

¿Alguna sugerencia?


Intenta usar un DecimalFormat de "0.00" en su lugar. Según los JavaDocs , esto no eliminará los 0 extra.


La clase DecimalFormat es para transformar un valor numérico decimal en una cadena. En su ejemplo, está tomando el String que proviene del método format () y lo coloca de nuevo en una variable doble. Si está generando esa doble variable, no verá la cadena con formato. Vea el ejemplo de código a continuación y su salida:

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

Qué salidas:

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


Prueba este código:

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

Resultado:

100.25 1,000.70 10,000.00


Prueba este código:

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

El resultado es: 10.00 20.00 0.00


Puedes probar algo como:

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

De esta forma, puede garantizar el número mínimo de dígitos antes o después del decimal


Use el formato "# .00".