Forum: PC-Programmierung visual c# 2005/ Komma geht bei Umwandlung verloren


von RingoStar (Gast)


Lesenswert?

Hallo,

ich habe ein Problem bei der Typenumwandlung unter C#. Ich möchte einen 
string in ein float umwandeln. Es geht mir aber das Komma (bzw der 
Punkt) verloren. Was mache ich falsch?
Ich habe schon gegoogelt aber nicht gefunden.

string sValue = "1.234";
float fValue = 0.0;

fValue = float.Parse(sValue);

textBox1.Text = fValue.ToString();

Ausgabe: 1234

Danke für Eure Hilfe
RingoStar

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

float.Parse verwendet aller Wahrscheinlichkeit nach die lokalen 
Einstellungen für das Zahlenformat. In Deutschland aber ist das 
Trennzeichen zwischen Vor- und Nachkommastellen eben das Komma und 
nicht der Punkt. Dieser hat hierzulande nur lesefördernde Funktion und 
gliedert Tausendergruppen.

Damit wird ist der übergebene String als 1234,0 und nicht als 1,234 
interpretiert.

Probiere mal

   string sValue = "1,234";

aus ...

von Kai G. (runtimeterror)


Lesenswert?

Der wird deine lokalen Ländereinstellungen verwenden. Ich wette, das 
steht auch in der MSDN dazu.

Such mal nach 'Locale' oder so. Wenn du dem sagst, er möchte das ganze 
doch bitte in der US-Notation machen, dann geht das.

Die dreckige Lösung: Ersetz einfach den Punkt durch Komma.

Gruß

Kai

ps: Zweiter! ;)

von RingoStar (Gast)


Lesenswert?

Hallo,

danke für Eure schnelle Antwort. Ich bekomme den String mit Punkt über 
die serielle Schnittstelle. Da kann ich den Punkt nicht so ohne weiteres 
ersetzen.

Gruß
RingoStar

von Kai G. (runtimeterror)


Lesenswert?

Die String-Klasse und Artverwandte hält mit Sicherheit Methoden dafür 
bereit.

von RingoStar (Gast)


Lesenswert?

Hallo,

klar gibt es solche Funktionen wie z.B. replace()

sValue = sValue.Replace('.', ',');

Damit klappt es dann auch. Ich habe aber bei so einer Sache gewaltige 
Bauchschmerzen. Hat jemand noch eine elegantere Idee?
Das ganze Gebietsschema wollte ich dafür auch nicht gleich umschalten.
Er soll lediglich den Punkt als Komma interpretieren.

Gruß
RingoStar

von Karl H. (kbuchegg)


Lesenswert?

RingoStar wrote:
> Das ganze Gebietsschema wollte ich dafür auch nicht gleich umschalten.

Musst du auch nicht.
Du kannst doch dem Parse einen Formatprovider mitgeben.

Ansonsten kannst du natürlich noch deine eigene Parse
Funktion schreiben. Die macht das dann so wie du dir
das vorstellst.


Dieser Komma-Punkt Unsinn ist bei mir auch immer ein PITA.

von Kai G. (runtimeterror)


Lesenswert?

Ich bin dafür, dass wir in Deutschland auch einen Dezimalpunkt statt 
Komma verwenden - als Ausgleich wird das Imperiale Maßsystem 
eingestampft - und die Franzosen opfern ihre Aussprache für Zahlen! - 
Das wär'n Deal finde ich ;)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> und die Franzosen opfern ihre Aussprache für Zahlen!

Du meinst, die Franzosen übernehmen die Zahlworte für 70, 80 und 90 von 
den Belgiern resp. Schweizern?

septante
octante oder nur in der Schweiz huitante
nonante


Das "imperiale Maßsystem" will ich aber behalten. Ich mag Quadratfuß, 
Kubikinch und vor allem das Pint. Das nämlich ist genau das kleine 
Quentchen mehr als ein halber Liter, der einen in der Kneipe dazu 
bringt, sich ein zweites (drittes, viertes ...) Halbliterglas bringen zu 
lassen.

Cheerio!

von Kai G. (runtimeterror)


Lesenswert?

Ich finde die englische Aussprache am Besten. Wer ahnt schon im 
Deutschen, dass die Zahl
'123456'
in der Reihenfolge
'132465'
ausgesprochen werden muss. Bei den Franzosen meinte ich z.B.
1999
dix-neuf-cent-quatre-vingt-dix-neuf (oder so)
zehn-neun-hundert-vier-zwanzig-zehn-neun

Teufelswerk, jawohl!

Das Pint wird einfach auf ein Liter mit 40% Messfehler geeicht und 
kostet 3 Kubikeuro.

Wenn wir schon dabei sind können wir auch alle Umlaute weglassen (weg 
mit den Encodings - back to ASCII), vom Dezimalsystem auf's hexadezimale 
umstellen und das Jahr hätte 265 Tage à 32 Stunden... Schaltjahre sind 
LSB-Rauschen und  Jahreszeiten nur unterschiedliche Duty-Cycles der 
Sonnen-PWM.

In diesem Sinne gebe ich zurück in die geschlossene Anstalt... back to 
topic...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> 1999
> dix-neuf-cent-quatre-vingt-dix-neuf (oder so)
  dix-neuf-cent-nonante-neuf

  zehn-neun-hundert-neunzig-neun.

Sofern man es bei der Jahrhundersprechweise lässt, ist das konsistent 
und logisch.

Alternativ wäre mille-neuf-cent-nonante-neuf auch eine Möglichkeit

 tausend-neun-hundert-neunzig-neun



Une bière, j'ai soif!

von JojoS (Gast)


Lesenswert?

>Das nämlich ist genau das kleine
>Quentchen mehr als ein halber Liter, der einen in der Kneipe dazu
>bringt, sich ein zweites (drittes, viertes ...) Halbliterglas bringen zu
>lassen.

das stimmt nicht ganz, ich habe mir mal ein paar Pints aus Englang 
mitgebracht. Ein Pint passt da nur rein wenn man das Glas bis zum Rand 
vollschüttet! Wenn da nur ein paar mm Schaum drauf sind dann ist in 
einem Pint Glas auch nur effektiv ein halber Liter drin. Tja, schon 
Obelix wusste: die Spinnen, die Briten !

von JojoS (Gast)


Lesenswert?

zum Topic:
lässt sich ganz einfach lösen mit Angabe der FormatInfo:

statt:
fValue = float.Parse(sValue);

verwende:
fValue = float.Parse(sValue, NumberFormatInfo.InvariantInfo);


dazu muß noch die Globalisierung benutzt werden:

using System.Globalization;

von RingoStar (Gast)


Lesenswert?

Hallo,

Vielen Dank, genau das habe ich gesucht. Es luppt!

Gruß
RingoStar

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> ich habe mir mal ein paar Pints aus Englang mitgebracht.
> Ein Pint passt da nur rein wenn man das Glas bis zum Rand
> vollschüttet!

Genau so sieht es das britische Eichwesen vor. Und genauso wird in 
Großbritannien Bier ausgeschenkt. Der Glasrand ist das Äquivalent des 
Eichstriches. Britisches Bier schäumt nicht so stark wie deutsches, und 
mit etwas Feinmotorik ist das kein Problem. Für die anderen liegen im 
Pub die sogenannten "beer mats" aus Frottee auf der Bar.

von Uhu U. (uhu)


Lesenswert?

PITA - was ist das? Google hält es für ein Fladenbrot...

von Karl H. (kbuchegg)


Lesenswert?

:-)

PITA

Pain In The Ass
-    -  -   -

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.