Respuestas:
Puede usar el printf
método, así:
System.out.printf("%.2f", val);
En resumen, la %.2f
sintaxis 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 decimalo
: entero octale
: coma flotante en notación científicaLocale.FRANCE
?
Locale.US
va 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.
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.
System.out.printf("%.2f", value)
sintaxis? ¿Todavía está por aquí?
DecimalFormat
respuestas, inmediatamente pensé que estaba equivocado, pero gracias por aclarar eso.
df.setMinimumFractionDigits(2);
para forzar dos dígitos
Sugeriría usar String.format () si necesita el valor como String
en su código.
Por ejemplo, puede usar String.format()
de la siguiente manera:
float myFloat = 2.001f;
String formattedString = String.format("%.02f", myFloat);
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 de 22.35. Si necesita 3 puntos decimales cámbielo a "% .3f".
Mucha gente lo ha mencionado DecimalFormat
. Pero también puede usarlo printf
si tiene una versión reciente de Java:
System.out.printf("%1.2f", 3.14159D);
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.0
nuevamente. 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).
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 .
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)
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
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)
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);
}
}
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);
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.round
lugar. 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
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);
}
}
String.format(java.util.Locale.US,"%.2f", val);