mikrocontroller.net

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


Autor: RingoStar (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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 ...

Autor: Kai G. (runtimeterror)
Datum:

Bewertung
0 lesenswert
nicht 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! ;)

Autor: RingoStar (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Kai G. (runtimeterror)
Datum:

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

Autor: RingoStar (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Kai G. (runtimeterror)
Datum:

Bewertung
0 lesenswert
nicht 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 ;)

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Kai G. (runtimeterror)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: JojoS (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 !

Autor: JojoS (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;

Autor: RingoStar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

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

Gruß
RingoStar

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Uhu Uhuhu (uhu)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
:-)

PITA

Pain In The Ass
-    -  -   -

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.