visual c# 2005/ Komma geht bei Umwandlung verloren

Gast #719993
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
Persönliche Seite #720002
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 ...
#720005
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! ;)
Gast #720038
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
#720052
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.
Persönliche Seite #720082
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!
#720104
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...
Gast #720213
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 !
Gast #720229
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;
Persönliche Seite #720562
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren