Autor Beitrag
syntec
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Sa 17.09.11 22:25 
Hallo,

irgendwie hänge ich an einer Konvertierungssachen, die ich nicht wirklich verstehe.
Ich lasse mir Zahlen, die ich aus einer Textdatei einlese, in einen DGV darstellen.
Diese Zahlen möchte ich nun im Grid ändern, dürfen aber einen Maximalwert, der ebenfalls im Grid steht und eingelesen wurde, nicht überschreiten.
Mit Hilfe von
ausblenden Quelltext
1:
double Wert = Double.Parse(DGV.Rows[e.RowIndex].Cells[3].Value.ToString());					

werden die Daten eingelesen und mit einer if-Anweisung verglichen.
Dummerweise sind die Werte ab und zu im Format: 1.000000000000000.
Die Werte werden aber nur mit einer Nachkommastelle betrachtet, so dass kleinere Veränderungen gar nicht berücksichtigt werden... Muss ich da vorher noch irgendwie eine Formatanweisung angeben, um mehr Nachkommastellen betrachten zu können?
ausblenden Quelltext
1:
Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");					

Habe ich nach InitializeComponent(); bereits gesetzt.

Danke,
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Sa 17.09.11 22:52 
user profile iconsyntec hat folgendes geschrieben Zum zitierten Posting springen:
Die Werte werden aber nur mit einer Nachkommastelle betrachtet, so dass kleinere Veränderungen gar nicht berücksichtigt werden...
Kannst du das vielleicht etwas ausführen? Grundsätzlich werden alle Double-Berechnungen natürlich mit maximaler Genauigkeit ausgeführt und bei einer Rückkonvertierung (je nach Format Specifier) in der knappesten Darstellung angegeben.

_________________
>λ=
syntec Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: So 18.09.11 11:56 
Hallo Kha,

ich habe es mit deciamal versucht, da dieser eine höhere Genauigkeit bietet.
Folgendermaßen sind es so aus:
ausblenden Quelltext
1:
2:
3:
4:
5:
decimal Wert = 2.000000000000001m;
decimal Max = 2.000000000000000m;
decimal erg = Wert - Max;

// Debugger sagt: Max = 2 und erg = 0

erg müsste aber 0.000000000000001 lauten. Warum macht er es nicht so?
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: So 18.09.11 12:11 
Dein gezeigter Code macht es so. Wenn er es bei dir nicht macht solltest du ein wenig mehr Context um deinen Testcode zeigen.
syntec Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: So 18.09.11 14:18 
So wie es jetzt aussieht, scheint es nun zu funktionieren.
Wollte ein Beispiel für das Topic bauen, konnte mein Problem aber nicht reproduizieren... :)

Eine abschließende Frage habe ich aber noch.
Der Benutzer kann den Wert ja im Grid ändern. Kann man den geänderten Wert dann nach Bestätigen in das ursprüngliche Format wandeln lassen, oder geht das nur mit aufwendigerer Methode (Schleife o.ä.)?
Sprich:
ursprünglicher Wert: 2.00000000000000
eingegebener Benutzerwert: 2.004
umwandeln in: 2.004000000000000

Danke,
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: So 18.09.11 14:49 
Wenn du explizit umwandeln willst dann hat jeder Datentyp eine ToString Methode mit entsprechenden Überladungen um das Format zu spezifizieren. Wenn ein Control per Databinding befüllst mußt du beim Binding das entsprechende Format angeben. Im speziellen fürs DataGridView siehe hier.