Formattazione di un float con 2 cifre decimali


210

Attualmente sto costruendo un modulo di vendita per un sito Web di clienti. Finora ho calcolato il prezzo di vendita per calcolarlo perfettamente, ma dove sono rimasto bloccato sta formattando l'output con 2 cifre decimali.

Attualmente sto chiamando questo in una variabile in modo da poter associare i risultati a una visualizzazione elenco.

Sale = float.Parse(((x.Sale_Price - (x.Sale_Price * (x.Discount_Price / 100))).ToString())),

Qualcuno può mostrarmi come formattare l'output con 2 cifre decimali ?? Grazie molto!


Controlla questo non sono sicuro, ma potrebbe essere che funzionerà ToString ("#. ##");
Syeda,

Risposte:


467

È possibile passare il formato al ToStringmetodo, ad esempio:

myFloatVariable.ToString("0.00"); //2dp Number

myFloatVariable.ToString("n2"); // 2dp Number

myFloatVariable.ToString("c2"); // 2dp currency

Stringhe di formato numeri standard


38
"N2" e "C2" aggiungeranno migliaia di separatori mentre "0.00" no.
Marc K,

5
Nel caso in cui tu non sia sicuro (lo ero), tutti questi modi per formattare un valore float forniscono arrotondamenti.
RenniePet,

46

La prima cosa che devi fare è usare il decimaltipo invece che floatper i prezzi. L'uso floatè assolutamente inaccettabile per questo perché non può rappresentare con precisione la maggior parte delle frazioni decimali.

Dopo averlo fatto, Decimal.Round()può essere utilizzato per arrotondare a 2 posti.


36

String.Format("{0:#,###.##}", value)

Un esempio più complesso della formattazione di stringhe in C # :

String.Format("{0:$#,##0.00;($#,##0.00);Zero}", value);

Questo produrrà "$ 1.240,00" se superato 1243,50. Produrrà lo stesso formato ma tra parentesi se il numero è negativo e produrrà la stringa "Zero" se il numero è zero.



4
string outString= number.ToString("####0.00");

1
Esistono differenze tra "0" e "#" nel formato personalizzato. "0": sostituisce lo zero con la cifra corrispondente se presente; in caso contrario, viene visualizzato zero nella stringa del risultato. "#": Sostituisce il simbolo "#" con la cifra corrispondente se presente; in caso contrario, nessuna cifra appare nella stringa del risultato. Riferimento
劉鎮 瑲

3

Come già accennato, dovrai utilizzare un risultato formattato; che è tutto fatto attraverso i Write(), WriteLine(), Format(), e ToString()metodi.

Ciò che non è stato menzionato è il formato a virgola fissa che consente un numero specificato di posizioni decimali. Usa una 'F' e il numero che segue la 'F' è il numero di cifre decimali emesse, come mostrato negli esempi.

Console.WriteLine("{0:F2}", 12);    // 12.00 - two decimal places
Console.WriteLine("{0:F0}", 12.3);  // 12 - ommiting fractions

2

Questo è per i casi in cui si desidera utilizzare stringhe interpolate . In realtà sto pubblicando questo perché sono stanco di tentativi ed errori e alla fine di scorrere tonnellate di documenti ogni volta che devo formattare alcuni scalari.

$"{1234.5678:0.00}"        "1234.57"        2 decimal places, notice that value is rounded
$"{1234.5678,10:0.00}"     "   1234.57"     right-aligned
$"{1234.5678,-10:0.00}"    "1234.57   "     left-aligned
$"{1234.5678:0.#####}"     "1234.5678"      5 optional digits after the decimal point
$"{1234.5678:0.00000}"     "1234.56780"     5 forced digits AFTER the decimal point, notice the trailing zero
$"{1234.5678:00000.00}"    "01234.57"       5 forced digits BEFORE the decimal point, notice the leading zero
$"{1234.5612:0}"           "1235"           as integer, notice that value is rounded
$"{1234.5678:F2}"          "1234.57"        standard fixed-point
$"{1234.5678:F5}"          "1234.56780"     5 digits after the decimal point, notice the trailing zero
$"{1234.5678:g2}"          "1.2e+03"        standard general with 2 meaningful digits, notice "e"
$"{1234.5678:G2}"          "1.2E+03"        standard general with 2 meaningful digits, notice "E"
$"{1234.5678:G3}"          "1.23E+03"       standard general with 3 meaningful digits
$"{1234.5678:G5}"          "1234.6"         standard general with 5 meaningful digits
$"{1234.5678:e2}"          "1.23e+003"      standard exponential with 2 digits after the decimal point, notice "e"
$"{1234.5678:E3}"          "1.235E+003"     standard exponential with 3 digits after the decimal point, notice "E"
$"{1234.5678:N2}"          "1,234.57"       standard numeric, notice the comma
$"{1234.5678:C2}"          "$1,234.57"      standard currency, notice the dollar sign
$"{1234.5678:P2}"          "123,456.78 %"   standard percent, notice that value is multiplied by 100
$"{1234.5678:2}"           "2"              :)

Avviso sulle prestazioni

Le stringhe interpolate sono lente. Nella mia esperienza questo è l'ordine (da veloce a lento):

  1. value.ToString(format)+" blah blah"
  2. string.Format("{0:format} blah blah", value)
  3. $"{value:format} blah blah"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.