Voglio aggiungere una virgola a migliaia di posti per un numero. String.Format()
?
String.Format("{0:n}", 1234); //Output: 1,234.00 string.Format("{0:n0}", 9876); // no digits after the decimal point. Output: 9,876
Ho trovato questo il modo più semplice:
myInteger.ToString("N0")
int number = 1000000000; string whatYouWant = number.ToString("#,##0"); //You get: 1,000,000,000
Se vuoi cultura specifica, potresti provare questo:
(19950000.0).ToString("N",new CultureInfo("en-US"))
= 19.950.000,00
(19950000.0).ToString("N",new CultureInfo("is-IS"))
= 19.950.000,00
Nota: alcune culture usano ,
per indicare decimale piuttosto che .
perciò stai attento.
Formati standard, con i relativi output,
Console.WriteLine("Standard Numeric Format Specifiers"); String s = String.Format("(C) Currency: . . . . . . . . {0:C}\n" + "(D) Decimal:. . . . . . . . . {0:D}\n" + "(E) Scientific: . . . . . . . {1:E}\n" + "(F) Fixed point:. . . . . . . {1:F}\n" + "(G) General:. . . . . . . . . {0:G}\n" + " (default):. . . . . . . . {0} (default = 'G')\n" + "(N) Number: . . . . . . . . . {0:N}\n" + "(P) Percent:. . . . . . . . . {1:P}\n" + "(R) Round-trip: . . . . . . . {1:R}\n" + "(X) Hexadecimal:. . . . . . . {0:X}\n", - 1234, -1234.565F); Console.WriteLine(s);
Esempio di output (cultura en-us):
(C) Currency: . . . . . . . . ($1,234.00) (D) Decimal:. . . . . . . . . -1234 (E) Scientific: . . . . . . . -1.234565E+003 (F) Fixed point:. . . . . . . -1234.57 (G) General:. . . . . . . . . -1234 (default):. . . . . . . . -1234 (default = 'G') (N) Number: . . . . . . . . . -1,234.00 (P) Percent:. . . . . . . . . -123,456.50 % (R) Round-trip: . . . . . . . -1234.565 (X) Hexadecimal:. . . . . . . FFFFFB2E
Questo è il formato migliore. Funziona in tutti questi casi:
String.Format( "{0:#,##0.##}", 0 ); // 0 String.Format( "{0:#,##0.##}", 0.5 ); // 0.5 - some of the formats above fail here. String.Format( "{0:#,##0.##}", 12314 ); // 12,314 String.Format( "{0:#,##0.##}", 12314.23123 ); // 12,314.23 String.Format( "{0:#,##0.##}", 12314.2 ); // 12,314.2 String.Format( "{0:#,##0.##}", 1231412314.2 ); // 1,231,412,314.2
String.Format("{0:#,###,###.##}", MyNumber)
Questo ti darà delle virgole nei punti pertinenti.
Se si desidera forzare un separatore “,” a prescindere dalla cultura (ad esempio in un messaggio di traccia o di registro), il codice seguente funzionerà e avrà il vantaggio di dire al prossimo che si imbatte esattamente in quello che si sta facendo.
int integerValue = 19400320; string formatted = string.Format(CultureInfo.InvariantCulture, "{0:N0}", integerValue);
imposta formattato su “19.400.320”
La risposta più votata è stata grande ed è stata utile per circa 7 anni. Con l’introduzione di C # 6.0 e in particolare l’interpolazione a stringhe, c’è un modo più ordinato e più sicuro, IMO, per fare ciò che è stato chiesto to add commas in thousands place for a number
:
var i = 5222000; var s = $"{i:n} is the number"; // results to > 5,222,000.00 is the number s = $"{i:n0} has no decimal"; // results to > 5,222,000 has no decimal
Dove la variabile i
è messa al posto del segnaposto (cioè {0}
). Quindi non c’è bisogno di ricordare quale object va in quale posizione. La formattazione (es :n
) non è cambiata. Per una funzionalità completa delle novità, puoi andare su questa pagina .
Nell’esempio seguente vengono visualizzati diversi valori formattati utilizzando stringhe di formato personalizzate che includono zero segnaposti.
String.Format("{0:N1}", 29255.0);
O
29255.0.ToString("N1")
risultato “29,255,0”
String.Format("{0:N2}", 29255.0);
O
29255.0.ToString("N2")
risultato “29,255.00”
semplicemente come questo:
float num = 23658; // for example num = num.ToString("N0"); // Returns 23,658
più informazioni sono qui
int num = 98765432; Console.WriteLine(string.Format("{0:#,#}", num));
Ad esempio String.Format("{0:0,0}", 1);
restituisce 01, per me non è valido
Questo funziona per me
19950000.ToString("#,#", CultureInfo.InvariantCulture));
uscita 19.950.000
Si noti che il valore che si sta formattando deve essere numerico. Non sembra che prenderà una rappresentazione di stringa di un numero e il formato è con virgole.
Più semplice, usando l’interpolazione della stringa invece di String.Format
$"{12456:n0}"; // 12,456 $"{12456:n2}"; // 12,456.00
o usando la tua variabile
double yourVariable = 12456.0; $"{yourVariable:n0}"; $"{yourVariable:n2}";
È ansible utilizzare una funzione come questa per formattare numeri e facoltativamente passare le cifre decimali desiderate. Se non vengono specificate le posizioni decimali, verranno utilizzate due cifre decimali.
public static string formatNumber(decimal valueIn=0, int decimalPlaces=2) { return string.Format("{0:n" + decimalPlaces.ToString() + "}", valueIn); }
Io uso decimal ma puoi cambiare il tipo con qualsiasi altro o usare un object anonimo. È anche ansible aggiungere un controllo degli errori per i valori decimali negativi.
String.Format("0,###.###"); also works with decimal places
Il metodo che non mi preoccupavo più delle culture e dei potenziali problemi di formattazione è che l’ho formattato come valuta e poi ho estratto il simbolo di valuta.
if (decimal.TryParse(tblCell, out result))
{ formattedValue = result.ToString("C").Substring(1); }
Qui di seguito è una buona soluzione in Java però!
NumberFormat fmt = NumberFormat.getCurrencyInstance(); System.out.println(fmt.format(n));
o per un modo più robusto si potrebbe desiderare di ottenere le impostazioni locali di un luogo particolare, quindi utilizzare come di seguito:
int n=9999999; Locale locale = new Locale("en", "US"); NumberFormat fmt = NumberFormat.getCurrencyInstance(locale); System.out.println(fmt.format(n));
US Locale OUTPUT: $ 9,999,999,00
Uscita locale tedesca
Locale locale = new Locale("de", "DE");
PRODUZIONE: 9.999.999,00 €
Uscita locale indiana
Locale locale = new Locale("de", "DE");
USCITA: Rs.9,999,999,00
Uscita locale estone
Locale locale = new Locale("et", "EE");
PRODUZIONE: 9 999 999 €
Come puoi vedere in diverse uscite non devi preoccuparti che il separatore sia una virgola o un punto o anche uno spazio puoi ottenere il numero formattato secondo gli standard i18n
Se vuoi mostrarlo in DataGridview, dovresti cambiare il suo tipo, perché default è String e dato che lo cambi in decimale lo consideri come Numero con virgola mobile
Dim dt As DataTable = New DataTable dt.Columns.Add("col1", GetType(Decimal)) dt.Rows.Add(1) dt.Rows.Add(10) dt.Rows.Add(2) DataGridView1.DataSource = dt