DevTrain Startseite Advanced Developers Conference vom 14.-15. Februar 2011  
  
  
SUCHEN:  
ARTIKEL ONLINE: 525   

Kategorien
.NET
Datenbanken
Web
XML

Allgemein
Camp
Foren
Events
Persönliche Einstellungen
Registrieren
Prämien Shop
Kontakt
Impressum
Über DevTrain

Autoren



 

Forum: VB.NET | Thema: AW: AW: AW: Rundungsfehler in VB.NET | Von: Thomas Hauser ( 26.08.2007 11:59)

Hallo,

das ist echt nicht lustig. Irgendwas is da richtig faul an der Funktion. Hier mal ein paar Tests:

Decimal-Wert gerundet auf 2 Stellen. Das Ergebnis ist für ToEven nicht korrekt, wenn ich mich nicht irre.
decimal d = 1.275m;
Console.WriteLine(System.Math.Round(d, 2, MidpointRounding.AwayFromZero).ToString()); //Ergebnis: 1.28
Console.WriteLine(System.Math.Round(d, 2, MidpointRounding.ToEven).ToString()); //Ergebnis: 1.28

Decimal-Wert gerundet auf 1 Stelle. Das Ergebnis ist korrekt.
d = 1.25m;
Console.WriteLine(System.Math.Round(d, 1, MidpointRounding.AwayFromZero).ToString()); //Ergebnis: 1.3
Console.WriteLine(System.Math.Round(d, 1, MidpointRounding.ToEven).ToString()); //Ergebnis: 1.2

Double-Wert gerundet auf 2 Stellen. Das Ergebnis ist für AwayFromZero nicht korrekt.
double d1 = 1.275;
Console.WriteLine(System.Math.Round(d1, 2, MidpointRounding.AwayFromZero).ToString()); //Ergebnis: 1.27
Console.WriteLine(System.Math.Round(d1, 2, MidpointRounding.ToEven).ToString()); //Ergebnis: 1.27

Double-Wert gerundet auf 1 Stelle. Das Ergebnis ist korrekt.
d1 = 1.25;
Console.WriteLine(System.Math.Round(d1, 1, MidpointRounding.AwayFromZero).ToString()); //Ergebnis: 1.3
Console.WriteLine(System.Math.Round(d1, 1, MidpointRounding.ToEven).ToString()); //Ergebnis: 1.2

Habe mal ein bisschen gesucht und festgestellt, dass viele dazu ihre eigene Funktion geschrieben haben. Betrachte die Nachkomma-Stelle digits+1 und entscheide! Aber das kann noch nicht sein.

Da muss ich noch etwas recherchieren. Vielleicht fällt dazu auch noch jemand anders was ein.

Grüße,

Thomas

Thomas Hauser (Trainer und Consultant, Blog: http://thomashauser.spaces.live.com, Forum: http://www.sharepointbook.de - Die Forum-Webseite zum Buch!)

Betreff Von Datum
AW: AW: AW: AW: Rundungsfehler in VB.NET
Vermutung: double speichert werte als flieskommazahl (float) ... damit wär beim Runden 1.275 intern als 1.27499..... <br>Dadurch dürfte beim "Abschneiden" Probleme entstehen :D<br><br>Seltsam auf jeden Fall...
Bernhard Grojer 26.08.2007 13:48
AW: AW: AW: AW: Rundungsfehler in VB.NET
Hallo Thomas,<br><br>und ich dachte schon, ich stehe völlig im Wald ;o)<br><br>Dann wird mir wohl auch nichts anderes übrig bleiben, als meine eigenen Rundungsroutinen zu schreiben - alles andere ist mir dann...
26.08.2007 14:21
AW: AW: AW: AW: AW: Rundungsfehler in VB.NET
Hallo,<br><br>jetzt habe ich eine akzeptable Lösung. Das wäre dann toString Methode von double oder decimal.<br>Formatstring: "Fd", wobei d die Anzahl der Nachkommastellen ist.<br><br>Hier ein paar Tests, die...
Thomas Hauser 26.08.2007 14:53

Antworten
Vorsicht bei der Eingabe: Die Zeichen ' oder -- sind nicht erlaubt!

 Betreff:
 Nachricht: Den Beitrag finden Sie nun unter: http://beta.devtrain.de/foren Die Benutzerdaten und Foreninhalte von beta.devtrain.de und www.devtrain.de sind die selben.
Sie können sich dort sogar per RSS über neue Inhalte informieren lassen.
Bei Problemen bitte direkt Mail an asp [AT] ppedv.de.

 Signatur:

  



Login
Username:


Passwort:






Passwort vergessen?

Advanced Developers Conference vom 14.-15. Februar 2011

© Copyright 2003 ppedv AG