Autor Beitrag
Maliko
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Mi 17.04.13 08:39 
Hi,

ich hätte da mal ein recht merkwürdiges Problem. Und zwar habe ich mir eine Methode geschrieben, welche einen Wärungsstring in eine normale Dezimalzahl ändern soll. Die sieht wie folgt aus:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
public decimal GetOriginalValue(string value)
{
    decimal output = 0;

    value = value.Replace(".""");
    if(value.Contains('€'))
        value = value.Remove(value.IndexOf(" €"));
    if (value.Contains("km"))
        value = value.Remove(value.IndexOf(" km"));
    if (value.Contains("kg"))
        value = value.Remove(value.IndexOf(" kg"));

    decimal.TryParse(value, out output);

    return output;
}


Diese verwende ich das erste mal wie folgt:

ausblenden C#-Quelltext
1:
tb_Gewicht.Text = sysHandler.GetOriginalValue(tb_Gewicht.Text).ToString();					

Wenn ich mir nun das Ergebnis von sysHandler.GetOriginalValue(tb_Gewicht.Text) anschaue (der String lautet zum Beispiel 1.250,00 kg), dann bekomme ich als ergebnis 1250 zurück.

ausblenden C#-Quelltext
1:
modifiedAuftrag.Gewicht = double.Parse(sysHandler.GetOriginalValue(tb_Gewicht.Text).ToString());					

Wenn ich mir nun das Ergebnis von sysHandler.GetOriginalValue(tb_Gewicht.Text) anschaue (der String ist der selbe wie oben), dann bekomme ich als ergebnis 125000 zurück.

Hat irgendjemand von euch eine Ahnung woran das liegen kann? Die erste Variante sitzt im TextBox.Enter-Event und die zweite Variante in einem Button.Click-Event, wobei beide Steuerelemente von der Firma Telerik kommen.

Über einen kurzen Denkansatz wäre ich euch sehr dankbar.

MfG Maliko

EDIT: Hab den ersten Funktionsaufruf geändert, da ich mich in der Funktion vertahn habe. Der zuerst genannte steht in einer anderen
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mi 17.04.13 10:44 
Hallo Maliko,

überleg dir mal den Sinn von
ausblenden C#-Quelltext
1:
modifiedAuftrag.Gewicht = double.Parse(sysHandler.GetOriginalValue(tb_Gewicht.Text).ToString());					

GetOriginalValue liefert dir doch schon ein decimal zurück.

Als Tipp: rufe mal double.Parse("1250,00") auf...
Stichwort: CultureInfo

P.S: Deine GetOriginalValue-Methode ist suboptimal, da sie nur für bestimmte Strings richtige Ergebnisse liefert, z.B. probiere mal "100kg" oder "1€"...

Und bitte Crossposts (s. Richtlinien 3.10 Crosspostings) immer angeben: myCSharp.de - Bei Funktionsaufruf zwei verschiedene Ergebnisse

Für diesen Beitrag haben gedankt: Maliko
Maliko Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Mi 17.04.13 15:25 
user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
P.S: Deine GetOriginalValue-Methode ist suboptimal, da sie nur für bestimmte Strings richtige Ergebnisse liefert, z.B. probiere mal "100kg" oder "1€"...

Ist schon richtig so. In die Spalten, wo mit der Funktion gearbeit wird, kann man nur Ziffern und das Komma eintragen. Dementsprechend kann da eigentlich kein anderer Fall eintreten.

Das mit der CultureInfo wars übrigens. Ich hatte an einer Stelle vergessen die CultureInfo rauszunehmen. Das Ding hatte ich schlicht und einfach übersehen.

Und ja ich weiß das der Parse umständlich ist. Ist aber der einzige Fall. Bis auf dieses Feld sind alle felder, welche mit der Methode arbeiten vom Typ decimal und ich hatte keinen Bock dafür ne Überladung zu schreiben.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mi 17.04.13 16:08 
Aber doch nicht über den Umweg mit einem String, sondern direkt
ausblenden C#-Quelltext
1:
modifiedAuftrag.Gewicht = (double)sysHandler.GetOriginalValue(tb_Gewicht.Text);