Risposte:
È possibile utilizzare il printf
metodo, in questo modo:
System.out.printf("%.2f", val);
In breve, la %.2f
sintassi dice a Java di restituire la variabile ( val
) con 2 cifre decimali ( .2
) nella rappresentazione decimale di un numero in virgola mobile ( f
) dall'inizio dell'identificatore di formato ( %
).
Ci sono altri caratteri di conversione che puoi usare oltre a f
:
d
: intero decimaleo
: numero intero ottalee
: virgola mobile in notazione scientificaLocale.FRANCE
?
Locale.US
vada troppo lontano. Se avete bisogno di codificare un locale "neutrale" per case-folding, il rendering numero, ecc, specificare Locale.ROOT
. Ciò sarebbe appropriato per il testo che verrà consumato da un altro programma, anziché renderizzato per gli utenti umani. Per il testo presentato a un utente, onora la sua locale, indipendentemente dal fatto che sia stata specificata esplicitamente o che sia l'impostazione predefinita.
È possibile utilizzare DecimalFormat
. Un modo per usarlo:
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
System.out.println(df.format(decimalNumber));
Un altro è costruirlo usando il #.##
formato.
Trovo tutte le opzioni di formattazione meno leggibili rispetto alla chiamata dei metodi di formattazione, ma è una questione di preferenza.
System.out.printf("%.2f", value)
sintassi? È ancora in giro?
DecimalFormat
risposte avevo subito pensato di sbagliarmi, ma grazie per avermi chiarito.
df.setMinimumFractionDigits(2);
per forzare due cifre
Suggerirei di utilizzare String.format () se hai bisogno del valore come String
nel tuo codice.
Ad esempio, è possibile utilizzare String.format()
nel modo seguente:
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));
L'output è 22.35. Se sono necessari 3 punti decimali, modificarlo in "% .3f".
Molte persone hanno menzionato DecimalFormat
. Ma puoi anche usare printf
se hai una versione recente di Java:
System.out.printf("%1.2f", 3.14159D);
Consulta i documenti sul Formatter per ulteriori informazioni sulla stringa di formato printf .
Un semplice trucco è generare una versione più breve della variabile moltiplicandola per es 100
. Arrotondandola e dividendola di 100.0
nuovo. In questo modo si genera una variabile, con 2 cifre decimali :
double new_variable = Math.round(old_variable*100) / 100.0;
Questo "trucco economico" è sempre stato abbastanza buono per me e funziona in qualsiasi lingua (non sono una persona Java, sto solo imparando).
È possibile utilizzare questi codici rapidi di seguito che si sono modificati alla fine. Aggiungi quanti zeri si riferisce dopo il punto
float y1 = 0.123456789;
DecimalFormat df = new DecimalFormat("#.00");
y1 = Float.valueOf(df.format(y1));
La variabile y1 era uguale a 0.123456789 prima. Dopo il codice si trasforma solo in 0.12 .
Guarda DecimalFormat
Ecco un esempio dal tutorial:
DecimalFormat myFormatter = new DecimalFormat(pattern);
String output = myFormatter.format(value);
System.out.println(value + " " + pattern + " " + output);
Se scegli un modello come "###. ##", otterrai due cifre decimali e penso che i valori siano arrotondati per eccesso. Dovrai guardare il link per ottenere il formato esatto che desideri (ad esempio, se vuoi zeri finali)
Di seguito è riportato il codice su come visualizzare un output di dati float con 2 cifre decimali in Java:
float ratingValue = 52.98929821f;
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsFR = Float.valueOf(decimalFormat.format(ratingValue)); // output is 52.98
OK - str per galleggiare.
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));
}
}
Produzione:
run:
[Original]: 0.09
[Local]: 0.10
[Remote]: 0.10
BUILD SUCCESSFUL (total time: 0 seconds)
piccolo programma semplice per dimostrazione:
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);
}
}
Fai solo String str = System.out.printf("%.2f", val).replace(",", ".");
se vuoi assicurarti che indipendentemente dalle impostazioni internazionali dell'utente, otterrai / visualizzerai sempre un "." come separatore decimale. Questo è un must se non vuoi far andare in crash il tuo programma se successivamente esegui una sorta di conversione comefloat f = Float.parseFloat(str);
Un problema che mi ha causato per un'ora o più, DecimalFormat
attivo: gestisce gli input double e float in modo diverso. Anche il cambio di RoundingMode non ha aiutato. Non sono un esperto, ma ho pensato che potesse aiutare qualcuno come me. Ho finito per usare Math.round
invece. Vedi sotto:
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)));
Produzione:
Double 0.7750 -> 0.78
Float 0.7750f -> 0.77
Rounding Up Double 0.7750 -> 0.78
Rounding Up Float 0.7750f -> 0.77
Prova questo:-
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);