Formatação decimal dupla em Java

Estou tendo alguns problemas para formatar os decimais de um duplo. Se eu tiver um valor duplo, por exemplo, 4.0, como formatar os decimais de modo que seja 4.00 em vez disso?

Uma das maneiras seria usar NumberFormat .

 NumberFormat formatter = new DecimalFormat("#0.00"); System.out.println(formatter.format(4.0)); 

Saída:

4,00

Com o Java 8, você pode usar o método de format ..: –

 System.out.format("%.2f", 4.0); // OR System.out.printf("%.2f", 4.0); 
  • f é usado para o valor do ponto floating .
  • 2 após decimal denota, número de casas decimais depois .

Para a maioria das versões do Java, você pode usar o DecimalFormat : –

  DecimalFormat formatter = new DecimalFormat("#0.00"); double d = 4.0; System.out.println(formatter.format(d)); 

Use String.format :

String.format("%.2f", 4.52135);

Usando String.format, você pode fazer isso:

 double price = 52000; String.format("$%,.2f", price); 

Observe a vírgula que torna isso diferente da resposta de @ Vincent

Saída:

$52,000.00

Um bom recurso para formatação é a página java oficial sobre o assunto

Você sempre pode usar o método estático printf from System.out – você então implementaria o formatador correspondente; Isso economiza espaço de pilha no qual outros exemplos exigem que você faça.

Ex:

 System.out.format("%.4f %n", 4.0); System.out.printf("%.2f %n", 4.0); 

Economiza espaço de heap, o que é um grande bônus, mas eu acredito que este exemplo é muito mais gerenciável do que qualquer outra resposta, especialmente porque a maioria dos programadores conhece a function printf de C (Java muda um pouco a function / método).

 new DecimalFormat("#0.00").format(4.0d); 
 double d = 4.0; DecimalFormat nf = DecimalFormat.getInstance(Locale.ENGLISH); System.out.println(nf.format("#.##")); 

Funciona 100%.

 import java.text.DecimalFormat; public class Formatting { public static void main(String[] args) { double value = 22.2323242434342; // or value = Math.round(value*100) / 100.0; System.out.println("this is before formatting: "+value); DecimalFormat df = new DecimalFormat("####0.00"); System.out.println("Value: " + df.format(value)); } } 

Um método alternativo é usar o método setMinimumFractionDigits da class NumberFormat .

Aqui você basicamente especifica quantos números deseja aparecer após o ponto decimal.

Portanto, uma input de 4.0 produziria 4.00 , supondo que seu valor especificado fosse 2.

Mas, se sua input Double contiver mais do que o valor especificado, ela terá o valor mínimo especificado e, em seguida, adicionará mais um dígito arredondado para cima / baixo

Por exemplo, 4.15465454 com uma quantidade mínima de 2 especificada produzirá 4.155

 NumberFormat nf = NumberFormat.getInstance(); nf.setMinimumFractionDigits(2); Double myVal = 4.15465454; System.out.println(nf.format(myVal)); 

Experimente online

Primeiro NumberFormat importação. Então adicione isto:

 NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance(); 

Isso lhe dará duas casas decimais e colocará um cifrão se estiver lidando com a moeda.

 import java.text.NumberFormat; public class Payroll { /** * @param args the command line arguments */ public static void main(String[] args) { int hoursWorked = 80; double hourlyPay = 15.52; double grossPay = hoursWorked * hourlyPay; NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance(); System.out.println("Your gross pay is " + currencyFormatter.format(grossPay)); } } 

Você pode fazer isso da seguinte maneira:

 double d = 4.0; DecimalFormat df = new DecimalFormat("#.##"); System.out.print(df.format(d)); 

Eu sei que este é um tópico antigo, mas se você realmente gosta de ter o período em vez da vírgula, salve seu resultado como X, 00 em uma String e, em seguida, simplesmente altere-o por um período para obter o valor de X.00.

A maneira mais simples é apenas usar replace.

 String var = "X,00"; String newVar = var.replace(",","."); 

A saída será o X.00 que você queria. Também para facilitar, você pode fazer tudo em um e salvá-lo em uma variável dupla:

 Double var = Double.parseDouble(("X,00").replace(",","."); 

Eu sei que esta resposta não é útil agora, mas talvez alguém que verifique este fórum esteja procurando uma solução rápida como essa.