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?


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"

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


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.


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;

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.



3

Versuche dies:

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

Ausgabe: 24,57


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


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);

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);
        }

1

Einfache Lösung:

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

//output: 123.45

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 ));
    

0

Verwenden Sie die Zeichenfolgeninterpolation decimalVar:0.00


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.