416 Stimmen

Verwendung von String Format zur Anzeige von Dezimalzahlen mit bis zu 2 Stellen oder einfachen Ganzzahlen

Ich habe ein Preisfeld anzuzeigen, die manchmal entweder 100 oder 100,99 oder 100,9 sein kann, was ich will, ist der Preis in 2 Dezimalstellen nur anzeigen, wenn die Dezimalstellen für diesen Preis eingegeben werden, zum Beispiel, wenn seine 100 so sollte es nur zeigen 100 nicht 100,00 und wenn der Preis 100,2 sollte es 100,20 ähnlich für 100,22 sollte gleich sein anzeigen. Ich habe gegoogelt und bin auf einige Beispiele gestoßen, aber sie entsprachen nicht genau dem, was ich wollte:

// just two decimal places
String.Format("{0:0.00}", 123.4567);      // "123.46"
String.Format("{0:0.00}", 123.4);         // "123.40"
String.Format("{0:0.00}", 123.0);         // "123.00"

6voto

Sepideh I Punkte 11

Versuchen Sie dies:

var number = 123.4567;
var str = number.ToString("N2");

5voto

Nikki Locke Punkte 2623

Ich fürchte, es gibt kein eingebautes Format, das dies leisten kann. Sie müssen ein anderes Format verwenden, je nachdem, ob der Wert eine ganze Zahl ist oder nicht. Oder Sie formatieren immer auf 2 Dezimalstellen und manipulieren die Zeichenkette anschließend, um alle nachgestellten ".00" zu entfernen.

3voto

ekkis Punkte 8772

Etwas Ähnliches wird auch funktionieren:

String.Format("{0:P}", decimal.Parse(Resellers.Fee)).Replace(".00", "")

3voto

Matt Punkte 23047

Wenn Sie mit Dezimalzahlen aus einer (T-)SQL-Datenbank arbeiten, möchten Sie in der Lage sein, löschbare und nicht löschbare Dezimalzahlen mit x Nachkommastellen zu konvertieren und den Code einfach anhand Ihrer Tabellendefinitionen zu überprüfen - und natürlich die richtige Anzahl von Dezimalstellen für den Benutzer anzuzeigen.

Leider konvertiert das Entity Framework nicht automatisch etwas wie eine SQL decimal(18,2) in ein .NET-Äquivalent mit der gleichen Anzahl von Dezimalstellen umwandeln (da nur Dezimalzahlen mit voller Genauigkeit verfügbar sind). Sie müssen die Dezimalstellen manuell abschneiden.

Also habe ich es so gemacht:

public static class Extensions
{
    public static string ToStringDecimal(this decimal d, byte decimals)
    {
        var fmt = (decimals>0) ? "0." + new string('0', decimals) : "0";
        return d.ToString(fmt);
    }

    public static string ToStringDecimal(this decimal? d, byte decimals)
    {
        if (!d.HasValue) return "";
        return ToStringDecimal(d.Value, decimals);
    }
}

Beispiel für die Verwendung:

void Main()
{
    decimal d = (decimal)1.2345;
    decimal? d2 = null; 

    Console.WriteLine(d.ToStringDecinal(2)); // prints: "1.23" (2 decimal places)
    Console.WriteLine(d.ToStringDecinal(0)); // prints: "1" (show integer number)
    Console.WriteLine(d2.ToStringDecimal(2)); // prints: "" (show null as empty string)
}

2voto

coding_is_fun Punkte 961

Um den Code, den Kahia geschrieben hat, klarer zu machen (er ist klar, wird aber schwierig, wenn man mehr Text hinzufügen will), versuchen Sie diese einfache Lösung.

if (Math.Round((decimal)user.CurrentPoints) == user.CurrentPoints)
     ViewBag.MyCurrentPoints = String.Format("Your current Points: {0:0}",user.CurrentPoints);
else
     ViewBag.MyCurrentPoints = String.Format("Your current Points: {0:0.0}",user.CurrentPoints);

Ich musste den zusätzlichen Cast (dezimal) hinzufügen, damit Math.Round die beiden dezimalen Variablen vergleichen kann.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X