numeros - ¿Cómo mostrar una salida de datos flotantes con 2 decimales en Java?
numeros decimales en java (12)
¿Puedo hacerlo con System.out.print
?
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 hacia arriba. Deberá consultar el enlace para obtener el formato exacto que desea (por ejemplo, si desea ceros al final)
Mucha gente ha mencionado DecimalFormat
. Pero también puedes usar printf
si tienes una versión reciente de Java:
System.out.printf("%1.2f", 3.14159D);
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)
Puede usar el método printf
, así:
System.out.printf("%.2f", val);
En resumen, la sintaxis %.2f
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 de f
:
-
d
: entero decimal -
o
: entero octal -
e
: punto flotante en notación científica
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 formateo, pero esa es una cuestión de preferencia.
Solo haga 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 obligatorio si no desea que su programa se cuelgue si posteriormente realiza algún tipo de conversión como float f = Float.parseFloat(str);
Sugeriría usar String.format() si necesitas el valor como una String
en tu código.
Por ejemplo, puede usar String.format()
de la siguiente manera:
float myFloat = 2.001f;
String formattedString = String.format("%.02f", myFloat);
Un truco simple es generar una versión más corta de tu variable multiplicándola por ej. 100
, redondeándola y dividiéndola por 100.0
nuevo. De esta forma generas 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 de Java, simplemente lo estoy aprendiendo).
pequeño programa simple para la 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);
}
}
double d = 1.234567;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));
float f = 102.236569f;
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsF = Float.valueOf(decimalFormat.format(f)); // output is 102.24
float floatValue=22.34555f;
System.out.print(String.format("%.2f", floatValue));
La salida es 22.35. Si necesita 3 decimales, cámbielo a "% .3f".