Ho dei problemi con la formattazione dei decimali di un doppio. Se ho un valore doppio, ad esempio 4.0, come formatto i decimali in modo che sia invece 4.00?
Ho dei problemi con la formattazione dei decimali di un doppio. Se ho un valore doppio, ad esempio 4.0, come formatto i decimali in modo che sia invece 4.00?
Risposte:
Uno dei modi sarebbe usare NumberFormat .
NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println(formatter.format(4.0));
Produzione:
4.00
Con Java 8, puoi usare il formatmetodo ..: -
System.out.format("%.2f", 4.0); // OR
System.out.printf("%.2f", 4.0);
fè usato per il floatingvalore in punti ..2 dopo i decimali, il numero di cifre decimali dopo .Per la maggior parte delle versioni di Java, puoi utilizzare DecimalFormat: -
DecimalFormat formatter = new DecimalFormat("#0.00");
double d = 4.0;
System.out.println(formatter.format(d));
Usa String.format :
String.format("%.2f", 4.52135);
Come da documenti:
La locale sempre utilizzata è quella restituita da
Locale.getDefault().
Usando String.format, puoi farlo:
double price = 52000;
String.format("$%,.2f", price);
Notare la virgola che lo rende diverso dalla risposta di @ Vincent
Produzione:
$52,000.00
Una buona risorsa per la formattazione è la pagina java ufficiale sull'argomento
È sempre possibile utilizzare il metodo statico, printf from System.outquindi implementare il formattatore corrispondente; questo consente di risparmiare spazio nell'heap in cui altri esempi richiedevano di fare.
Ex:
System.out.format("%.4f %n", 4.0);
System.out.printf("%.2f %n", 4.0);
Risparmia spazio nell'heap, il che è un grande vantaggio, tuttavia ritengo che questo esempio sia molto più gestibile di qualsiasi altra risposta, soprattutto perché la maggior parte dei programmatori conosce la funzione printf da C (Java cambia leggermente la funzione / metodo).
outè il file PrintStream.
double d = 4.0;
DecimalFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
System.out.println(nf.format("#.##"));
new DecimalFormat("#0.00").format(4.0d);
Un metodo alternativo è utilizzare il setMinimumFractionDigitsmetodo della NumberFormatclasse.
Qui fondamentalmente specifichi quanti numeri vuoi che appaiano dopo il punto decimale.
Quindi un input di 4.0produrrebbe 4.00, supponendo che l'importo specificato fosse 2.
Ma, se il tuo Doubleinput contiene più dell'importo specificato, ci vorrà l'importo minimo specificato, quindi aggiungi una cifra in più arrotondata per eccesso / per difetto
Ad esempio, 4.15465454con un importo minimo di 2 specificato produrrà4.155
NumberFormat nf = NumberFormat.getInstance();
nf.setMinimumFractionDigits(2);
Double myVal = 4.15465454;
System.out.println(nf.format(myVal));
Ci sono molti modi per farlo. Questi sono riportati di seguito:
Supponiamo che il tuo numero originale sia fornito di seguito:
double number = 2354548.235;
Utilizzando NumberFormat:
NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println(formatter.format(number));
Utilizzando String.format:
System.out.println(String.format("%,.2f", number));
Utilizzando DecimalFormat e pattern:
NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
DecimalFormat decimalFormatter = (DecimalFormat) nf;
decimalFormatter.applyPattern("#,###,###.##");
String fString = decimalFormatter.format(number);
System.out.println(fString);
Utilizzo di DecimalFormat e pattern
DecimalFormat decimalFormat = new DecimalFormat("############.##");
BigDecimal formattedOutput = new BigDecimal(decimalFormat.format(number));
System.out.println(formattedOutput);
In tutti i casi l' output sarà: 2354548.23
Nota :
Durante l'arrotondamento puoi aggiungere il RoundingModetuo formattatore. Ecco alcune modalità di arrotondamento fornite di seguito:
decimalFormat.setRoundingMode(RoundingMode.CEILING);
decimalFormat.setRoundingMode(RoundingMode.FLOOR);
decimalFormat.setRoundingMode(RoundingMode.HALF_DOWN);
decimalFormat.setRoundingMode(RoundingMode.HALF_UP);
decimalFormat.setRoundingMode(RoundingMode.UP);
Ecco le importazioni :
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;
Puoi utilizzare uno dei metodi seguenti
Se stai usando java.text.DecimalFormat
DecimalFormat decimalFormat = NumberFormat.getCurrencyInstance();
decimalFormat.setMinimumFractionDigits(2);
System.out.println(decimalFormat.format(4.0));
O
DecimalFormat decimalFormat = new DecimalFormat("#0.00");
System.out.println(decimalFormat.format(4.0)); Se vuoi convertirlo in un semplice formato stringa
System.out.println(String.format("%.2f", 4.0)); Tutto il codice di cui sopra verrà stampato 4.00
Funziona al 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));
}
}
Prima importazione NumberFormat. Quindi aggiungi questo:
NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();
Questo ti darà due cifre decimali e metterà un segno di dollaro se si tratta di valuta.
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));
}
}
Puoi farlo come segue:
double d = 4.0;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));
##posto di00
So che questo è un vecchio argomento, ma se ti piace davvero avere il punto al posto della virgola, salva il tuo risultato come X, 00 in una stringa e poi cambia semplicemente per un punto in modo da ottenere X.00
Il modo più semplice è usare la sostituzione.
String var = "X,00";
String newVar = var.replace(",",".");
L'output sarà l' X.00 che volevi. Inoltre per semplificare puoi fare tutto in uno e salvarlo in una doppia variabile:
Double var = Double.parseDouble(("X,00").replace(",",".");
So che questa risposta non è utile in questo momento, ma forse qualcuno che controlla questo forum cercherà una soluzione rapida come questa.
String.format()ojava.text.Format.