none
Anzeige von Fließkommazahlen mit dem 'double'-Datentyp und Methode zur Rundung von Zahlen RRS feed

  • Frage

  • Guten Tag,

    ich bin neu in diesem Forum. Ich entwickle mit Visual C# und nutze Visual Studio 2008 Professionell Edition.

    Ich habe zwei Fragen:

    1.:
    Wie kann ich bei dem Datentyp 'double' eine Fließkommazahl wie z. B. 2,53 E -7 als gewöhnliche Dezimalzahl 0,000000253 darstellen?

    2.:
    Gibt es eine Methode in Visual C#, mit der ich eine Zahl nach der kaufmännischen allgemeinen Rundungsregel runden kann?
    Zum Beispiel 10,5342 auf 10,53?

    Vielen Dank!

    Sonntag, 10. April 2011 11:35

Antworten

  • Hallo R.,

    hier ein paar C# Möglichkeiten und Antworten zu Deinen Fragen:

      string s1, s2, s3;
    
      //(1) Wie kann ich bei dem Datentyp 'double' eine Fließkommazahl 
      //wie z. B. 2,53 E -7 als gewöhnliche Dezimalzahl 0,000000253 darstellen?
      double db = 2.53E-7;
      s1 = db.ToString();   //ergibt: "2,53E-07"
      s2 = db.ToString("N9");  //ergibt: "0,000000253"
      s3 = ((decimal)db).ToString(); //ergibt: "0,000000253"
    
      //(2) Gibt es eine Methode in Visual C#, mit der ich eine Zahl 
      // nach der kaufmännischen allgemeinen Rundungsregel runden kann?
      // Zum Beispiel 10,5342 auf 10,53?
      double d2 = 10.5342;
      double dNeu = Math.Round(d2, 2); // 10.53
      double d3 = Math.Round(10.5249, 2); // 10.52
      double d4 = Math.Round(10.525, 2); // 10.52
      var d5 = Math.Round(10.525, 2, MidpointRounding.AwayFromZero); //10.53
      Debugger.Break(); // Zahlen im Debugger anschauen ...
    

    [Rundung – Wikipedia] -> "Kaufmännisches Runden":
    http://de.wikipedia.org/wiki/Rundung#Kaufm.C3.A4nnisches_Runden

    [Decimal.Round-Methode (Decimal, Int32, MidpointRounding) (System)]
    http://msdn.microsoft.com/de-de/library/9s0xa85y.aspx
    (gemäß IEEE 754 / Abschnitt 4)

    Sonntag, 10. April 2011 14:59

Alle Antworten

  • Für die Rundung auf zwei Nachkommastellen versuche Math.Round(10.5342, 2), http://msdn.microsoft.com/de-de/library/75ks3aby.aspx. Prüfe aber selber, ob das Resultat dem entspricht, was du als "kaufmännisches" Runden verstehst, die Doku nennt es "Rundung auf den nächsten Wert bzw. unverzerrte Rundung (Banker's Rounding)".
    MVP Data Platform Development My blog
    Sonntag, 10. April 2011 12:58
  • Hallo R.,

    hier ein paar C# Möglichkeiten und Antworten zu Deinen Fragen:

      string s1, s2, s3;
    
      //(1) Wie kann ich bei dem Datentyp 'double' eine Fließkommazahl 
      //wie z. B. 2,53 E -7 als gewöhnliche Dezimalzahl 0,000000253 darstellen?
      double db = 2.53E-7;
      s1 = db.ToString();   //ergibt: "2,53E-07"
      s2 = db.ToString("N9");  //ergibt: "0,000000253"
      s3 = ((decimal)db).ToString(); //ergibt: "0,000000253"
    
      //(2) Gibt es eine Methode in Visual C#, mit der ich eine Zahl 
      // nach der kaufmännischen allgemeinen Rundungsregel runden kann?
      // Zum Beispiel 10,5342 auf 10,53?
      double d2 = 10.5342;
      double dNeu = Math.Round(d2, 2); // 10.53
      double d3 = Math.Round(10.5249, 2); // 10.52
      double d4 = Math.Round(10.525, 2); // 10.52
      var d5 = Math.Round(10.525, 2, MidpointRounding.AwayFromZero); //10.53
      Debugger.Break(); // Zahlen im Debugger anschauen ...
    

    [Rundung – Wikipedia] -> "Kaufmännisches Runden":
    http://de.wikipedia.org/wiki/Rundung#Kaufm.C3.A4nnisches_Runden

    [Decimal.Round-Methode (Decimal, Int32, MidpointRounding) (System)]
    http://msdn.microsoft.com/de-de/library/9s0xa85y.aspx
    (gemäß IEEE 754 / Abschnitt 4)

    Sonntag, 10. April 2011 14:59