Datum:
Hallo, Ich versuche zurzeit meinen Beschleunigungssensor am PC einzulesen, was auch funktioniert. Jedoch habe ich das Problem, dass ich den Wert am PC weiterverarbeiten will. Die einzelnen Werte sind mit "$" getrennt: Wert1$Wert2$Wert3 Das Problem ist jetzt nur, dass die werte meistens im 0,xxx bereich liegen. Bis jetzt habe ich die Zahlen so angezeigt:
void Inputform()
{
try
{
Werte = indata.Split('$');
label4.Text = Werte[0]; //X Wert
label5.Text = Werte[1]; //Y Wert
label6.Text = Werte[2]; //Z Wert
|
Jetzt muss ich aber die Werte weiterverarbeiten. Dabei habe ich schon versucht die Werte in Double und float zu konvertieren
//double: double X = Convert.ToDouble(Werte[0]); //float: float X = (float)Convert.ToDouble(Werte[0]); //oder X = float.Parse(Werte[0]); |
Jedes mal erhalte ich aber falsche Ergebnisse, da bei der Konvertierung das Komma nicht berücksichtigt wird: aus 0,921 wird 921 aus 1,222 wird 1222 Jetzt meine Frage: Wie kann ich den String in eine Variable Konvertieren, bei der das Komma im String berücksichtigt wird? Mfg
Datum:
Pascal H. schrieb: > Jedes mal erhalte ich aber falsche Ergebnisse, da bei der Konvertierung > das Komma nicht berücksichtigt wird: > aus 0,921 wird 921 > aus 1,222 wird 1222 In (ernstzunehmenden) Programmiersprachen verwendet man generell einen Dezimalpunkt und kein Komma. Mach einen Zeichenersatz von ',' auf '.' dann können deine Parse Funktionen damit auch was anfangen. Oder lass dir vom Sender die Werte gleich vernünftig mit einem '.' generieren. deutscher Sprachraum: Dezimal-Komma, Tausender-Punkte 4.567,9 viertausend fünfhundert siebenunssechzig komma neun englischsprachiger Sprachraum: Dezimal-Punkt, Tausender-Komma 4,567.9 fourthousend fivehundred sixtyseven point nine Programmiersprachen kommen aus dem englischen Sprachraum.
Datum:
Karl Heinz Buchegger schrieb: > In (ernstzunehmenden) Programmiersprachen verwendet man generell einen > Dezimalpunkt und kein Komma. Mach einen Zeichenersatz von ',' auf '.' > dann können deine Parse Funktionen damit auch was anfangen. in c# geht das übrigens so: > englischsprachiger Sprachraum:
float.Parse(Werte[0], System.Globalization.CultureInfo.InvariantCulture); |
> deutscher Sprachraum:
float.Parse(Werte[0], new System.Globalization.CultureInfo("de-DE")); |
Datum:
Karl Heinz Buchegger schrieb: > In (ernstzunehmenden) Programmiersprachen verwendet man generell einen > Dezimalpunkt und kein Komma Wenn Du (Karl Heinz Buchegger) damit C/C++ meinst, könntest Du evtl. Recht haben. Im Allgemeinen verwendet man Konvertierungsmethoden, die die kulturspezifischen Eigenheiten des jeweiligen Users berücksichtigen. Im vorliegenden Fall also, dass der User ein Komma und keinen Punkt eingibt, weil das in seinem Kulturkreis Konvention ist. Im Speziellen (in C#) wären das z.B. Double.Parse(string s,NumberStyles style, IFormatProvider provider, out double result) oder auch Convert.ToDouble(Object value,IFormatProvider provider). Der Parameter provider kann z.B. durch die Klasse CultureInfo zur Verfügung gestellt werden. Wie das genau geht, müsstest Du (Pascal H.) allerdings über die MSDN in Erfahrung bringen. Gruß Markus
Datum:
__tom schrieb: >> englischsprachiger Sprachraum: > float.Parse(Werte[0], System.Globalization.CultureInfo.InvariantCulture); Wie der Bezeichner InvariantCulture besagt, es handelt sich um ein neutrales Format, und nicht um ein englischsprachiges. Darin gibt es durchaus Unterschiede. Ein englisches Format würdest Du z.B. mit CreateSpecificCulture("en-US") bekommen. Die InvariantCulture entspricht übrigens dem Format, das Karl Heinz Buchegger in seinem Post vorgeschlagen hatte. __tom schrieb: >> deutscher Sprachraum: > float.Parse(Werte[0], new System.Globalization.CultureInfo("de-DE")); Das würde prinzipiell funktionieren. Normalerweise sollte man aber die statische Methode CreateSpecificCulture("de-DE") verwenden, da diese Variante nur genau einmal ein CultureInfo-Objekt für "de-DE" anlegt. Gruß Markus
Datum:
Markus V. schrieb: > Wie der Bezeichner InvariantCulture besagt, es handelt sich um ein > neutrales Format, und nicht um ein englischsprachiges stimmt, danke, mir lag es auf der zunge :)
Datum:
Funktioniert auch ganz wunderbar mit Convert. ... in C#
Convert.ToDouble(Wert[0],System.Globalization.CultureInfo.InvariantCulture) |
Danke & Mfg Aslof
Datum:
...oder man schreibt einfach: double Wert0 = Convert.ToDouble(Convert.ToDecimal(Werte[0])); ..oder man rechnet halt mir decimal weiter: decimal Wert0 = Convert.ToDecimal(Werte[0]);
