Respostas:
Você pode usar o printf
método, assim:
System.out.printf("%.2f", val);
Em resumo, a %.2f
sintaxe diz ao Java para retornar sua variável ( val
) com 2 casas decimais ( .2
) na representação decimal de um número de ponto flutuante ( f
) desde o início do especificador de formato ( %
).
Existem outros caracteres de conversão que você pode usar além de f
:
d
: inteiro decimalo
: inteiro octale
: ponto flutuante na notação científicaLocale.FRANCE
?
Locale.US
vai longe demais. Se você precisar codificar um código de idioma "neutro" para dobrar maiúsculas e minúsculas, renderização de números etc., especifique Locale.ROOT
. Isso seria apropriado para o texto que será consumido por outro programa, em vez de renderizado para usuários humanos. Para o texto apresentado a um usuário, respeite seu código de idioma, se ele foi especificado explicitamente ou se é o padrão.
Você pode usar DecimalFormat
. Uma maneira de usá-lo:
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
System.out.println(df.format(decimalNumber));
Outro é construí-lo usando o #.##
formato.
Acho todas as opções de formatação menos legíveis do que chamar os métodos de formatação, mas isso é uma questão de preferência.
System.out.printf("%.2f", value)
sintaxe? Ainda está por aí?
DecimalFormat
respostas, imediatamente pensei que estava errado, mas obrigado por esclarecer isso.
df.setMinimumFractionDigits(2);
para forçar dois dígitos
Eu sugeriria o uso de String.format () se você precisar do valor como String
no seu código.
Por exemplo, você pode usar String.format()
da seguinte maneira:
float myFloat = 2.001f;
String formattedString = String.format("%.02f", myFloat);
double d = 1.234567;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));
DecimalFormat df = new DecimalFormat("0.00");
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));
A saída é 22,35. Se você precisar de 3 casas decimais, mude para "% .3f".
Muitas pessoas mencionaram DecimalFormat
. Mas você também pode usar printf
se tiver uma versão recente do Java:
System.out.printf("%1.2f", 3.14159D);
Consulte os documentos no Formatador para obter mais informações sobre a string de formato printf .
Um truque simples é gerar uma versão mais curta da sua variável, multiplicando-a por exemplo 100
, arredondando-a e dividindo-a 100.0
novamente. Dessa forma, você gera uma variável com 2 casas decimais :
double new_variable = Math.round(old_variable*100) / 100.0;
Esse "truque barato" sempre foi bom o suficiente para mim e funciona em qualquer idioma (eu não sou uma pessoa Java, apenas aprendendo).
Você pode usar esses códigos rápidos abaixo que se alteraram no final. Adicione quantos zeros se refere após o ponto
float y1 = 0.123456789;
DecimalFormat df = new DecimalFormat("#.00");
y1 = Float.valueOf(df.format(y1));
A variável y1 era igual a 0,123456789 antes. Após o código, ele se transforma apenas em 0,12 .
Veja DecimalFormat
Aqui está um exemplo do tutorial:
DecimalFormat myFormatter = new DecimalFormat(pattern);
String output = myFormatter.format(value);
System.out.println(value + " " + pattern + " " + output);
Se você escolher um padrão como "###. ##", receberá duas casas decimais e acho que os valores são arredondados. Você vai querer olhar para o link para obter o formato exato que deseja (por exemplo, se deseja zeros à direita)
Abaixo está o código de como você pode exibir uma saída de dados flutuantes com 2 casas decimais em Java:
float ratingValue = 52.98929821f;
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsFR = Float.valueOf(decimalFormat.format(ratingValue)); // output is 52.98
OK - str para flutuar.
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));
}
}
Resultado:
run:
[Original]: 0.09
[Local]: 0.10
[Remote]: 0.10
BUILD SUCCESSFUL (total time: 0 seconds)
pequeno programa simples para demonstração:
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);
}
}
Faça isso apenas String str = System.out.printf("%.2f", val).replace(",", ".");
se quiser garantir que, independentemente da localidade do usuário, você sempre obtenha / exiba um "." como separador decimal. Isso é obrigatório se você não quiser interromper o programa se, posteriormente, fizer algum tipo de conversão comofloat f = Float.parseFloat(str);
Um problema que me levou por uma hora ou mais, em DecimalFormat
- Ele lida com entradas duplas e flutuantes de maneira diferente. Mesmo a mudança de RoundingMode não ajudou. Não sou especialista, mas achei que poderia ajudar alguém como eu. Acabou usando Math.round
. Ver abaixo:
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)));
Resultado:
Double 0.7750 -> 0.78
Float 0.7750f -> 0.77
Rounding Up Double 0.7750 -> 0.78
Rounding Up Float 0.7750f -> 0.77
Experimente o seguinte: -
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);