Lassen Sie nach dem Punkt nur zwei Dezimalstellen

73
public void LoadAveragePingTime()
{
    try
    {
        PingReply pingReply = pingClass.Send("logon.chronic-domination.com");
        double AveragePing = (pingReply.RoundtripTime / 1.75);

        label4.Text = (AveragePing.ToString() + "ms");                
    }
    catch (Exception)
    {
        label4.Text = "Server is currently offline.";
    }
}

Derzeit ist mein label4.Text so etwas wie: "187.371698712637".

Ich brauche es, um etwas zu zeigen wie: "187.37"

Nur zwei Beiträge nach dem DOT. Kann mir jemand helfen?

Sergio Tapia
quelle
2
Zu Ihrer Information - Ich denke, Sie meinten, es sollte 187,3 * 7 * anzeigen, nicht .34
Matt Grande

Antworten:

161

string.Format ist dein Freund.

String.Format("{0:0.00}", 123.4567);      // "123.46"
Matt Grande
quelle
Und wieder bin ich erstaunt über die Geschwindigkeit dieser Seite. Danke für die Hilfe, funktioniert super!
Sergio Tapia
@Steve, yep sieht so aus! Zumindest hast du mehr Wiederholungen: P
Matt Grande
7
Ja, deshalb hast du 11k.
MrBoJangles
5
Dies ändert den Typ der Dezimalstelle und Sie müssen wieder in die Dezimalzahl konvertieren, wenn Sie eine Dezimalstelle haben möchten. Ich denke, dass Math.Round (x, 2) die bessere Antwort ist, wenn Sie die Dezimalzahl beibehalten möchten, ohne hin und her zu konvertieren. Das Runden der 3. Ziffer auf die 2. Ziffer ist auch sinnvoll, wenn sie größer als 5 ist.
Emil
1
Ja, es hängt davon ab, was Sie brauchen. In diesem Fall brauchte er eine Schnur, also habe ich das gezeigt. Um klar zu sein, wird String.Formatdie Rundung genauso behandelt Math.Round.
Matt Grande
59

Wenn Sie nur zwei Zahlen nach dem Komma nehmen möchten, können Sie die Matheklasse verwenden, die Ihnen die Rundungsfunktion gibt, zum Beispiel:

float value = 92.197354542F;
value = (float)System.Math.Round(value,2);         // value = 92.2;

Hoffe diese Hilfe
Prost

Anas
quelle
Ich habe Float-Wert. Wie kann ich das Gleiche tun? Ich habe die obige Methode ausprobiert, aber es gibt einen Syntaxfehler, der den Typ float nicht in double konvertieren kann
Rami Far
30
// 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"

http://www.csharp-examples.net/string-format-double/

bearbeiten

Keine Ahnung, warum sie "String" anstelle von "String" verwendet haben, aber der Rest ist korrekt.

Steven Sudit
quelle
String ist der gleiche wie String in C #. Ich bin mir nicht sicher, warum die Sprache beides hat, aber es tut es.
Matt Grande
Welche zu verwenden ist eine gute Frage. Was passiert, wenn der String später einer schnelleren String2-Klasse zugeordnet wird? Wird diese Klasse dieselbe Formatmethode haben?
Yuriy Faktorovich
4
Ich denke, dass es der bevorzugte Stil ist, String für statische Funktionsaufrufe zu verwenden
Joe H
@Yuriy - Wir werden diese Brücke überqueren, wenn wir uns mit einer schnelleren String2-Klasse auseinandersetzen müssen (von der ich sicher hoffe, dass sie einen besseren Namen hat)
Matt Grande
3
.Net hat System.String oder kurz String. C # hat einen String, einen nativen Typ, der System.String zugeordnet ist. Sie können einen anstelle des anderen verwenden, aber beim Programmieren von C # gibt es keinen Grund, den Nicht-C # -Namen zu verwenden, auch nicht in der Statik. Aufgrund der gängigen FormatWith-Erweiterungsmethoden wird die Frage, ob Zeichenfolgen für statische Aufrufe großgeschrieben werden sollen, natürlich weniger relevant.
Steven Sudit
7
double amount = 31.245678;
amount = Math.Floor(amount * 100) / 100;
Miru
quelle
2
Im Allgemeinen sind Antworten viel hilfreicher, wenn sie eine Erklärung enthalten, was der Code tun soll und warum dies das Problem löst, ohne andere einzuführen. (Dieser Beitrag wurde von mindestens einem Benutzer markiert, vermutlich weil er dachte, eine Antwort ohne Erklärung sollte gelöscht werden.)
Nathan Tuggy
5

Sie können dies verwenden

"String.Format (" {0: F2} ", String Value);"

Gibt Ihnen nur die zwei Ziffern nach Punkt, genau zwei Ziffern.

Himanshu Shukla
quelle
4
yourValue.ToString("0.00") will work.
Sumit Joshi
quelle
3

Versuche dies:

double result = Math.Round(24.576938593,2);
MessageBox.Show(result.ToString());

Ausgabe: 24,57

user3077282
quelle
2

Alternativ können Sie auch den zusammengesetzten Operator F verwenden und dann angeben, wie viele Dezimalstellen nach der Dezimalstelle erscheinen sollen.

string.Format("{0:F2}", 123.456789);     //123.46
string.Format("{0:F3}", 123.456789);     //123.457
string.Format("{0:F4}", 123.456789);     //123.4568

Es wird sich abrunden, also sei dir dessen bewusst.

Ich habe die allgemeine Dokumentation bezogen. Es gibt dort auch eine Menge anderer Formatierungsoperatoren, die Sie überprüfen können.

Quelle: https://msdn.microsoft.com/en-us/library/dwhawy9k(v=vs.110).aspx

Taylor Flatt
quelle
2

Verwendung der Eigenschaft von String

double value = 123.456789;
String.Format("{0:0.00}", value);

Hinweis: Dies kann nur zur Anzeige verwendet werden.

Verwenden von System.Math

double value = 123.456789;
System.Math.Round(value, 2);
Md. Shafiqur Rahman
quelle
1

Versuche dies

public static string PreciseDecimalValue(double Value, int DigitsAfterDecimal)
        {
            string PreciseDecimalFormat = "{0:0.0}";

            for (int count = 2; count <= DigitsAfterDecimal; count++)
            {
                PreciseDecimalFormat = PreciseDecimalFormat.Insert(PreciseDecimalFormat.LastIndexOf('}'), "0");
            }
            return String.Format(PreciseDecimalFormat, Value);
        }
Tanmay Nehete
quelle
1

Einfache Lösung:

double totalCost = 123.45678;
totalCost = Convert.ToDouble(String.Format("{0:0.00}", totalCost));

//output: 123.45
Saif
quelle
1

double doublVal = 123.45678;

Es gibt zwei Möglichkeiten.

  1. zur Anzeige in Zeichenfolge:

    String.Format("{0:0.00}", doublVal );
    
  2. für wieder bekommen Double

    doublVal = Convert.ToDouble(String.Format("{0:0.00}", doublVal ));
    
Ali Raza
quelle
0

Verwenden Sie die Zeichenfolgeninterpolation decimalVar:0.00

emanuel
quelle
Vielleicht können Sie Ihrer Frage noch mehr hinzufügen, vielleicht können Sie erklären, warum dies das Problem löst, einige Hintergrundinformationen zur Interpolation?
Miltonb
Die Verwendung der String.Format-String-Interpolation ermöglicht stattdessen eine einfachere und intuitivere String-Formatierung.
Emanuel