Tach zusammen,
ich finde dazu leider nix in der Suche, man verzeihe mir eine eventuelle Redundanz.
In zwei verschiedenen .NET-Anwendungen (gleiche Maschine, gleiches Framework) ergibt
double test = double.Parse("855,1");
bei einem Mal: test = 855.1 und bei der anderen Applikation test = 855.10000000000002
Es ist exakt der gleiche Ausdruck. Deklaration, Operation und Zuweisung in einer Zeile.
Ich begreifs nicht mehr ...
Help, anyone?
🙂 Torsten
Hallo the_lmich,
der Unterschied liegt darin, ob in den Ländereinstellungen Komma oder Punkt als Dezimaltrenner eingestellt ist.
Wenn du das vermeiden willst, verwende eine feste Kultur, am bessten InvariantCulture.
herbivore
Hallo herbivore,
danke für die Antwort. Bei zu-String Formatierungen kenne ich das, aber bei zu-Double ist mir das neu. Wo gebe ich die Culture den an?
Gruß
🙂 Torsten
@herbivore: Ich bin mir nicht sicher ob du das Problem richtig erkannt hast. Bei beiden Computern wird das Komma richtig gesetzt, nur bei einem wird komischerweise falsch gerundet oder so.
Wir haben genau das selbe Problem seit längerem in der Firma.
Wenn Microsoft Visual SourceSafe 2005 installiert ist, runden alle Programme die unter SourceControl stehen falsch. Das heißt es passiert genau das selbe wie bei deinem Beispiel. Wird aber SourceSafe deinstalliert, funktioniert wieder alles richtig.
Auch ist mir das Verhalten beim Microsoft Sql Management Studio aufgefallen, das beim Eintragen bestimmter Werte immer falsch gerundet wird, wobei beim Sql Enterprise Manager dieser Fehler nicht auftritt.
Sehr kurios wir haben das so gelöst, das wir nirgends in der Applikation mehr float/double verwenden sondern nur mehr decimal weil dort der Fehler nicht aufgetreten ist.
Habe damals im Internet auch nichts vergleichbares dazu gefunden.
Lg XXX
Hi xxxprod,
danke für Deine Antwort. DAS genau ist der Unterschied zwischen den beiden Applikationen. Wie bei Euch.
Das ist ja unglaublich!
Vielen Dank
🙂 Torsten
Hallo the_lmich,
Wo gebe ich die Culture den an?
wenn es gewesen wäre, was ich fälschlich vermutet habe, dann würdest du die Culture bei double.Parse angeben. Von double.Parse gibt es mehr als eine Überladung.
herbivore
Hallo herbivore,
okay - danke dennoch.
Grüße
🙂 Torsten
Hallo,
gleiches Problem - ähnliche Baustelle:
In einem größeren Projekt (dass auch unter SourceCode Verwaltung steht), liefern folgende Zeilen krumme Werte. Ausgangspunkt ist natürlich ein anderer, aber das nur am Rande.
decimal deci = 123.45678m;
double dRes = Convert.ToDouble(deci);
dRes = Math.Round(dRes, 3);
Nun habe ich die selben Zeilen in einem kleinen Testprojekt gegengecheckt -> da geht es.
Das Testprojekt auch in SourceSafe eingecheckt -> geht trotzdem noch!
So, nun die Fragen: Ist das einfach nur ein Bug, der in großen Projekten gerne mal auftritt oder kann das auch irgendwas mit irgendwo gesetzten Umgebungsvariablen (/Culture Einstellungen?) für Genauigkeit etc. pp zu tun haben?
Und was zum Geier kann man dagegen tun wenn alle bisher gefundenen und selbst entwickelten Workarounds absolut keinen Effekt haben, man aber aufgrund Datenmodell und diverser Berechnungen auf 'double' angewiesen ist?
Verzweifelte Grüße
Thunder
Wenn SOurceSafe solche Problem bringt.. solltet ihr vielleicht auf andere Programme wie CVS oder SVN umsteigen.
Original von Thunderhawk
Nun habe ich die selben Zeilen in einem kleinen Testprojekt gegengecheckt -> da geht es.
Das Testprojekt auch in SourceSafe eingecheckt -> geht trotzdem noch!
An SourceSafe liegt es ja wohl nicht - oder nicht nur...
Noch irgendwelche Ideen oder Anregungen, wie man das Problem umgehen oder diesem auf den Grund gehen könnte? Ist ja doch äusserst kurios, dass double abhängig vom Projektkontext mal funktioniert (so genau das bei diesem Datentyp geht) und mal nicht.