Risposte:
String.format("%1$,.2f", myDouble);
String.format utilizza automaticamente le impostazioni internazionali predefinite.
%1, %2e così via può essere utilizzato per riordinare l'output in base all'indice degli argomenti di input. Vedere questo . È possibile omettere l'indice e l'ordine di formattazione verrà assunto dal formatter.
String.format("%4.3f" , x) ;
Significa che abbiamo bisogno di un totale di 4 cifre in ans, di cui 3 dopo il decimale. E f è l'identificatore di formato di double. x indica la variabile per la quale vogliamo trovarla. Ha funzionato per me. . .
String.format("%014.3f" , 58.656565)-> 0000000058,657: 14 simboli in totale: 8 zeri e 5 numeri e 1 virgola. Quindi in questo caso il numero 14 indica il numero totale di simboli (quelli extra vengono sostituiti con zero iniziale, potrebbero andare senza, quindi sostituirebbero con lo spazio) nella stringa del risultato . La .3parte è completamente indipendente qui.
String.format("%014.3f" , 58.656565)-> 58,657. Lo prendo perché la preferenza va alla .3fparte: prima stampa il numero con 3 cifre decimali e poi se rimangono dei simboli , stampa gli spazi iniziali (o zero / qualunque cosa). In questo caso il numero è 2 + 3 + 1 = 6 simboli e volevamo solo stampare 4, quindi sicuramente non ci sono spazi extra.
Se vuoi formattarlo con i simboli impostati manualmente, usa questo:
DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
decimalFormatSymbols.setDecimalSeparator('.');
decimalFormatSymbols.setGroupingSeparator(',');
DecimalFormat decimalFormat = new DecimalFormat("#,##0.00", decimalFormatSymbols);
System.out.println(decimalFormat.format(1237516.2548)); //1,237,516.25
È preferibile la formattazione basata sulle impostazioni locali.
codice estratto da questo link ;
Double amount = new Double(345987.246);
NumberFormat numberFormatter;
String amountOut;
numberFormatter = NumberFormat.getNumberInstance(currentLocale);
amountOut = numberFormatter.format(amount);
System.out.println(amountOut + " " +
currentLocale.toString());
L'output di questo esempio mostra come il formato dello stesso numero varia con le impostazioni internazionali:
345 987,246 fr_FR
345.987,246 de_DE
345,987.246 en_US
public class MainClass {
public static void main(String args[]) {
System.out.printf("%d %(d %+d %05d\n", 3, -3, 3, 3);
System.out.printf("Default floating-point format: %f\n", 1234567.123);
System.out.printf("Floating-point with commas: %,f\n", 1234567.123);
System.out.printf("Negative floating-point default: %,f\n", -1234567.123);
System.out.printf("Negative floating-point option: %,(f\n", -1234567.123);
System.out.printf("Line-up positive and negative values:\n");
System.out.printf("% ,.2f\n% ,.2f\n", 1234567.123, -1234567.123);
}
}
E stampa:
3 (3) +3 00003
Formato a virgola mobile predefinito: 1234567,123000
Virgola mobile con virgole: 1.234.567.123000 Default a virgola
mobile negativo: -1.234.567.123000 Opzione a
virgola mobile negativa: (1.234.567, 123000)Valori positivi e negativi dell'allineamento :
1.234.567,12
-1.234.567,12
Ci sono molti modi per farlo. Quelli sono dati sotto:
Supponiamo che il tuo numero originale sia indicato sotto: doppio numero = 2354548.235;
NumberFormatModalità d' uso e arrotondamento
NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
DecimalFormat decimalFormatter = (DecimalFormat) nf;
decimalFormatter.applyPattern("#,###,###.##");
decimalFormatter.setRoundingMode(RoundingMode.CEILING);
String fString = decimalFormatter.format(number);
System.out.println(fString);
Utilizzo del formattatore di stringhe
System.out.println(String.format("%1$,.2f", number));
In tutti i casi il output sarà: 2354548.24
Nota :
Durante l'arrotondamento puoi aggiungere il RoundingModetuo formattatore. Ecco alcuni modi di arrotondamento indicati 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;
Uso DecimalFormat
NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
DecimalFormat decimalFormatter = (DecimalFormat) nf;
decimalFormatter.applyPattern("#,###,###.##");
String fString = decimalFormatter.format(myDouble);
System.out.println(fString);
String.format(Locale.GERMAN, "%1$,.2f", myDouble);