Formatieren eines Gleitkommas mit 2 Dezimalstellen

210

Ich baue derzeit ein Verkaufsmodul für eine Kundenwebsite auf. Bisher habe ich den Verkaufspreis perfekt berechnet, aber wo ich festgefahren bin, formatiere ich die Ausgabe auf 2 Dezimalstellen.

Ich rufe dies derzeit in einer Variablen auf, damit ich die Ergebnisse an eine Listenansicht binden kann.

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

Kann mir jemand zeigen, wie man die Ausgabe auf 2 Dezimalstellen formatiert? Danke vielmals!

Callum
quelle
Überprüfen Sie dies Ich bin nicht sicher, aber möglicherweise funktioniert es ToString ("#. ##");
Syeda

Antworten:

467

Sie können das Format an die ToStringMethode übergeben, z.

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

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

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

Standard-Zahlenformat-Zeichenfolgen

WraithNath
quelle
38
"N2" und "C2" fügen tausend Trennzeichen hinzu, "0.00" nicht.
Marc K
5
Nur für den Fall, dass Sie sich nicht sicher sind (ich war es), bieten alle diese Möglichkeiten zum Formatieren eines Float-Werts eine Rundung.
RenniePet
46

Das erste, was Sie tun müssen, ist, den decimalTyp anstelle floatder Preise zu verwenden. Die Verwendung floatist dafür absolut inakzeptabel, da sie die meisten Dezimalbrüche nicht genau darstellen kann.

Sobald Sie dies getan haben, Decimal.Round()können Sie auf 2 Stellen runden.

Michael Borgwardt
quelle
36

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

Ein komplexeres Beispiel aus der Zeichenfolgenformatierung in C # :

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

Dies gibt "$ 1,240.00" aus, wenn 1243,50 bestanden wird. Es wird das gleiche Format ausgegeben, jedoch in Klammern, wenn die Zahl negativ ist, und die Zeichenfolge "Null", wenn die Zahl Null ist.

alexandrul
quelle
4
string outString= number.ToString("####0.00");
Danyolgiax
quelle
1
Im benutzerdefinierten Format gibt es Unterschiede zwischen "0" und "#". "0": Ersetzt die Null durch die entsprechende Ziffer, falls eine vorhanden ist; Andernfalls wird in der Ergebniszeichenfolge Null angezeigt. "#": Ersetzt das Symbol "#" durch die entsprechende Ziffer, falls eine vorhanden ist. Andernfalls wird in der Ergebniszeichenfolge keine Ziffer angezeigt. Referenz
劉鎮 瑲
3

Wie bereits erwähnt, müssen Sie ein formatiertes Ergebnis verwenden. das alles geschieht durch die Write(), WriteLine(), Format()und ToString()Methoden.

Was nicht erwähnt wurde, ist das Festkommaformat, das eine bestimmte Anzahl von Dezimalstellen zulässt. Es wird ein 'F' verwendet und die Zahl nach dem 'F' ist die Anzahl der ausgegebenen Dezimalstellen, wie in den Beispielen gezeigt.

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

Dies gilt für Fälle, in denen Sie interpolierte Zeichenfolgen verwenden möchten . Ich poste dies tatsächlich, weil ich es leid bin, zu versuchen und zu irren und schließlich jedes Mal, wenn ich etwas Skalar formatieren muss, durch Tonnen von Dokumenten zu scrollen.

$"{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"              :)

Leistungswarnung

Interpolierte Zeichenfolgen sind langsam. Nach meiner Erfahrung ist dies die Reihenfolge (schnell bis langsam):

  1. value.ToString(format)+" blah blah"
  2. string.Format("{0:format} blah blah", value)
  3. $"{value:format} blah blah"
saastn
quelle