¿Cómo imprimir un flotante con 2 decimales en Java?

Respuestas:

250

Puede usar el printfmétodo, así:

System.out.printf("%.2f", val);

En resumen, la %.2fsintaxis le dice a Java que devuelva su variable ( val) con 2 decimales ( .2) en representación decimal de un número de coma flotante ( f) desde el inicio del especificador de formato ( %).

Hay otros caracteres de conversión que puede usar además f:

  • d: entero decimal
  • o: entero octal
  • e: coma flotante en notación científica
Anthony Forloney
fuente
13
Tenga cuidado ya que String.format depende de su configuración local actual, es posible que no obtenga un punto como separador. Prefiero usarString.format(java.util.Locale.US,"%.2f", val);
Gomino
1
@gomino ¿Por qué no Locale.FRANCE?
erickson
3
@gomino Exactamente. Entonces, ¿por qué pondrías puntos en los números para los usuarios franceses?
erickson
1
Agregué este comentario como un recordatorio para advertir a las personas que esperan tener siempre un punto como separador.
Gomino
66
@gomino Eso tiene sentido, pero creo que "preferir" la codificación dura Locale.USva demasiado lejos. Si necesita codificar una configuración regional "neutral" para el plegado de mayúsculas, la representación de números, etc., especifique Locale.ROOT. Esto sería apropiado para el texto que será consumido por otro programa, en lugar de ser presentado para usuarios humanos. Para el texto presentado a un usuario, respete su configuración regional, ya sea que la haya especificado explícitamente o sea la predeterminada.
erickson
179

Puedes usar DecimalFormat. Una forma de usarlo:

DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
System.out.println(df.format(decimalNumber));

Otro es construirlo usando el #.##formato.

Encuentro que todas las opciones de formato son menos legibles que llamar a los métodos de formato, pero eso es una cuestión de preferencia.

Bozho
fuente
11
¿Qué pasó con la System.out.printf("%.2f", value)sintaxis? ¿Todavía está por aquí?
Anthony Forloney
66
es. sigue siendo una opción: puede recuperar su respuesta;)
Bozho
Parece que es mi opción, ya que todavía no sé cómo usar DecimalFormat :) ¡Gracias!
via_point
No he hecho mucho trabajo en Java en mucho tiempo, y cuando seguí viendo DecimalFormatrespuestas, inmediatamente pensé que estaba equivocado, pero gracias por aclarar eso.
Anthony Forloney
9
agregar df.setMinimumFractionDigits(2);para forzar dos dígitos
Terel
88

Sugeriría usar String.format () si necesita el valor como Stringen su código.

Por ejemplo, puede usar String.format()de la siguiente manera:

float myFloat = 2.001f;

String formattedString = String.format("%.02f", myFloat);
John P.
fuente
14
"% .02f" y "% .2f" es lo mismo
Borzh
40
double d = 1.234567;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));
Kevin Sylvestre
fuente
55
Hola Kevin, si ingreso 10.0000, solo obtengo 10. Si quiero mostrar 10.00, ¿cómo puedo hacerlo?
Mdhar9e
2
@ Uso de Mdhar9eDecimalFormat df = new DecimalFormat("0.00");
K.Sopheak
16
float f = 102.236569f; 
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsF = Float.valueOf(decimalFormat.format(f)); // output is 102.24
Phan Van Linh
fuente
44
Dependiendo de la ubicación, puede obtener una coma. Si desea un separador de puntos, use esto: DecimalFormat ("#. ##", DecimalFormatSymbols (Locale.US))
DPM
10
float floatValue=22.34555f;
System.out.print(String.format("%.2f", floatValue));

La salida es de 22.35. Si necesita 3 puntos decimales cámbielo a "% .3f".

Aldin Philo
fuente
9

Un truco simple es generar una versión más corta de su variable multiplicándola, por ejemplo 100, redondeándola y dividiéndola 100.0nuevamente. De esta manera genera una variable, con 2 decimales :

double new_variable = Math.round(old_variable*100) / 100.0;

Este "truco barato" siempre fue lo suficientemente bueno para mí y funciona en cualquier idioma (no soy una persona Java, solo lo estoy aprendiendo).

Birk
fuente
1
Esto está mal, muchos números serán números repetitivos en representación flotante después de dividir por 100. Por lo tanto, no dos decimales.
mate
8

Puede usar estos códigos rápidos a continuación que se modificaron al final. Agregue cuántos ceros se refiere después del punto

float y1 = 0.123456789;
DecimalFormat df = new DecimalFormat("#.00");  
y1 = Float.valueOf(df.format(y1));

La variable y1 era igual a 0.123456789 antes. Después del código, solo se convierte en 0.12 .

Bahía
fuente
2
No muestra 0 antes del punto. Debe ser DecimalFormat df = new DecimalFormat ("0.00");
Ridhuvarshan
¡Sin lugar a duda! ¡DecimalFormat ("0.00") también funcionará! Gran lugar
Bahía
6

Mira DecimalFormat

Aquí hay un ejemplo del tutorial:

  DecimalFormat myFormatter = new DecimalFormat(pattern);
  String output = myFormatter.format(value);
  System.out.println(value + "  " + pattern + "  " + output);

Si elige un patrón como "###. ##", obtendrá dos decimales, y creo que los valores se redondean. Deberá mirar el enlace para obtener el formato exacto que desea (por ejemplo, si desea ceros finales)

Uri
fuente
5

A continuación se muestra el código de cómo puede mostrar una salida de datos flotantes con 2 decimales en Java:

float ratingValue = 52.98929821f; 
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsFR = Float.valueOf(decimalFormat.format(ratingValue)); // output is 52.98
Keshav Gera
fuente
3

OK - str para flotar.

package test;

import java.text.DecimalFormat;

public class TestPtz {
  public static void main(String[] args) {
    String preset0 = "0.09,0.20,0.09,0.07";
    String[] thisto = preset0.split(",");    
    float a = (Float.valueOf(thisto[0])).floatValue();
    System.out.println("[Original]: " + a);   
    a = (float) (a + 0.01);

    // Part 1 - for display / debug
    System.out.printf("[Local]: %.2f \n", a);
    // Part 2 - when value requires to be send as it is
    DecimalFormat df = new DecimalFormat();
    df.setMinimumFractionDigits(2);
    df.setMaximumFractionDigits(2);
    System.out.println("[Remote]: " + df.format(a));

  }
}

Salida:

run:
[Original]: 0.09
[Local]: 0.10 
[Remote]: 0.10
BUILD SUCCESSFUL (total time: 0 seconds)

fuente
1

pequeño programa simple para demostración:

import java.io.*;
import java.util.Scanner;

public class twovalues {

    public static void main(String args[]) {

        float a,b;
        Scanner sc=new Scanner(System.in);
        System.out.println("Enter Values For Calculation");

        a=sc.nextFloat();
        b=sc.nextFloat();

        float c=a/b;
        System.out.printf("%.2f",c);
    }
}
Pavan vadrevu
fuente
1

Simplemente, String str = System.out.printf("%.2f", val).replace(",", ".");si desea asegurarse de que independientemente de la configuración regional del usuario, siempre obtendrá / mostrará un "." como separador decimal Esto es imprescindible si no desea hacer que su programa se bloquee si luego realiza algún tipo de conversión comofloat f = Float.parseFloat(str);

Paul Efford
fuente
1

Un problema que me tuvo durante una hora o más, encendido DecimalFormat: maneja las entradas dobles y flotantes de manera diferente. Incluso el cambio de RoundingMode no ayudó. No soy un experto, pero pensé que podría ayudar a alguien como yo. Terminé usando en su Math.roundlugar. Vea abajo:

    DecimalFormat df = new DecimalFormat("#.##");
    double d = 0.7750;
    System.out.println(" Double 0.7750 -> " +Double.valueOf(df.format(d)));
    float f = 0.7750f;
    System.out.println(" Float 0.7750f -> "+Float.valueOf(df.format(f)));
    // change the RoundingMode
    df.setRoundingMode(RoundingMode.HALF_UP);
    System.out.println(" Rounding Up Double 0.7750 -> " +Double.valueOf(df.format(d)));
    System.out.println(" Rounding Up Float 0.7750f -> " +Float.valueOf(df.format(f)));

Salida:

Double 0.7750 -> 0.78
Float 0.7750f -> 0.77

Rounding Up Double 0.7750 -> 0.78
Rounding Up Float 0.7750f -> 0.77
usuario2984447
fuente
0

Prueba esto:-

private static String getDecimalFormat(double value) {

    String getValue = String.valueOf(value).split("[.]")[1];

      if (getValue.length() == 1) {
          return String.valueOf(value).split("[.]")[0] +
                "."+ getValue.substring(0, 1) + 
                String.format("%0"+1+"d", 0);
       } else {
          return String.valueOf(value).split("[.]")[0]
            +"." + getValue.substring(0, 2);
      }


 }
Nathani Software
fuente
Para más detalles: - makecodesimpleandeasy.blogspot.com/2019/08/…
Nathani Software