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 format
metodo ..: -
System.out.format("%.2f", 4.0); // OR
System.out.printf("%.2f", 4.0);
f
è usato per il floating
valore 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.out
quindi 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 setMinimumFractionDigits
metodo della NumberFormat
classe.
Qui fondamentalmente specifichi quanti numeri vuoi che appaiano dopo il punto decimale.
Quindi un input di 4.0
produrrebbe 4.00
, supponendo che l'importo specificato fosse 2.
Ma, se il tuo Double
input 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.15465454
con 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 RoundingMode
tuo 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
.