Estou tendo alguns problemas para formatar os decimais de um duplo. Se eu tiver um valor duplo, por exemplo, 4.0, como formato os decimais para que seja 4,00?
Estou tendo alguns problemas para formatar os decimais de um duplo. Se eu tiver um valor duplo, por exemplo, 4.0, como formato os decimais para que seja 4,00?
Respostas:
Uma das maneiras seria usar NumberFormat .
NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println(formatter.format(4.0));
Resultado:
4,00
Com o Java 8, você pode usar o format
método ..: -
System.out.format("%.2f", 4.0); // OR
System.out.printf("%.2f", 4.0);
f
é usado para floating
valor em pontos ..2
após decimal denota, número de casas decimais após .
Para a maioria das versões Java, você pode usar 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);
De acordo com os documentos:
O local sempre usado é aquele retornado por
Locale.getDefault()
.
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
Resultado:
$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 implementa o formatador correspondente; isso economiza espaço de heap no qual outros exemplos exigiam que você fizesse.
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, no entanto, eu tenho a opinião de que este exemplo é muito mais gerenciável do que qualquer outra resposta, especialmente porque a maioria dos programadores conhece a função printf do C (o Java muda ligeiramente a função / método).
out
é o PrintStream
.
double d = 4.0;
DecimalFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
System.out.println(nf.format("#.##"));
new DecimalFormat("#0.00").format(4.0d);
Um método alternativo é usar o setMinimumFractionDigits
método da NumberFormat
classe.
Aqui, você basicamente especifica quantos números deseja que apareçam após o ponto decimal.
Portanto, uma entrada de 4.0
produziria 4.00
, supondo que o valor especificado fosse 2.
Mas, se sua Double
entrada contiver mais do que o valor especificado, levará o valor mínimo especificado e, em seguida, adicionará mais um dígito arredondado para cima / para baixo
Por exemplo, 4.15465454
com uma quantidade mínima de 2 especificados produzirá4.155
NumberFormat nf = NumberFormat.getInstance();
nf.setMinimumFractionDigits(2);
Double myVal = 4.15465454;
System.out.println(nf.format(myVal));
Existem muitas maneiras de fazer isso. Esses são dados abaixo:
Suponha que seu número original seja fornecido abaixo:
double number = 2354548.235;
Usando NumberFormat:
NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println(formatter.format(number));
Usando String.format:
System.out.println(String.format("%,.2f", number));
Usando DecimalFormat e padrão:
NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
DecimalFormat decimalFormatter = (DecimalFormat) nf;
decimalFormatter.applyPattern("#,###,###.##");
String fString = decimalFormatter.format(number);
System.out.println(fString);
Usando DecimalFormat e padrão
DecimalFormat decimalFormat = new DecimalFormat("############.##");
BigDecimal formattedOutput = new BigDecimal(decimalFormat.format(number));
System.out.println(formattedOutput);
Em todos os casos, a saída será: 2354548,23
Nota :
Durante o arredondamento, você pode adicionar RoundingMode
seu formatador. Aqui estão alguns modos de arredondamento fornecidos abaixo:
decimalFormat.setRoundingMode(RoundingMode.CEILING);
decimalFormat.setRoundingMode(RoundingMode.FLOOR);
decimalFormat.setRoundingMode(RoundingMode.HALF_DOWN);
decimalFormat.setRoundingMode(RoundingMode.HALF_UP);
decimalFormat.setRoundingMode(RoundingMode.UP);
Aqui estão as importações :
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;
Você pode usar qualquer um dos métodos abaixo
Se você estiver usando java.text.DecimalFormat
DecimalFormat decimalFormat = NumberFormat.getCurrencyInstance();
decimalFormat.setMinimumFractionDigits(2);
System.out.println(decimalFormat.format(4.0));
OU
DecimalFormat decimalFormat = new DecimalFormat("#0.00");
System.out.println(decimalFormat.format(4.0));
Se você quiser convertê-lo em formato de string simples
System.out.println(String.format("%.2f", 4.0));
Todo o código acima imprimirá 4,00
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));
}
}
Primeira importação NumberFormat
. Em seguida, adicione este:
NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();
Isso dará a você duas casas decimais e colocará um cifrão se for para 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));
##
vez de00
Eu sei que este é um tópico antigo, mas se você realmente gosta de ter o ponto em vez da vírgula, apenas salve seu resultado como X, 00 em uma String e simplesmente altere por um ponto para obter X.00
A maneira mais simples é usar substituir.
String var = "X,00";
String newVar = var.replace(",",".");
A saída será o X.00 desejado. Além disso, para facilitar, você pode fazer tudo de uma vez 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 esta.
String.format()
oujava.text.Format
.