Re: CultureInfo & Decimal.Parse
- From: Peter Götz <gssg_nospam@xxxxxxxxxxx>
- Date: Fri, 13 Jan 2006 19:29:51 +0100
Hallo Micha,
> ich habe folgenden Code testweise mal versucht :
>
> Dim culture As New System.Globalization.CultureInfo("en-US")
> Dim irgend As String = "1999,00"
>
> MsgBox(Decimal.Parse(irgend, Globalization.NumberStyles.Currency,
culture))
Du hast Culture "en-US" gewählt und möchtest damit einen String, welcher
eine Zahlendarstellung im Deutschen Format parsen.
Das passt irgendwie nicht so recht zusammen.
> Was ich erreichen möchte ist, dass ich aus einem String (den bekomme ich
so
> über eine DB und welcher
>
> eine Dezimal-Zahl enthält in der Form wie oben der String deklariert ist)
Du bekommst also Strings, welche als Dezimaltrenner immer ein "," (Komma)
enthalten.
Richtig so?
> eine Zahl Konvertiere die als
>
> Decimal-Trennzeichen den Punkt hat.
Decimal.Parse() liefert einen Wert vom Typ Decimal, aber keinen String.
Somit hat dieser numerische Wert auch kein länderspezifisches Format. Es ist
halt einfach ein numerischer Wert.
> aber wenn ich es mit der oben
> eingestellten Culture mache, dann
>
> gibt er mir die Zahl so wie oben deklariert sie ist aus, bloß ohne das
> Decimaltrennzeichen. d.h. 199990
Das ist ja auch richtig, da bei Culture = "en-US" als Dezimaltrennzeichen
ein Punkt erwartet wird und das Komma lediglich als Gruppierungszeichen
gewertet wird.
>
> Was mache ich falsch, dass die Zahl nicht richtig umgewandelt wird.
>
> Kann mir jmd. von euch den oben geschriebenen Code so umstellen das es
> funktioniert bzw. zeigen wie es
>
> anders geht. Vlt. ist ja mein Ansatz auch komplett falsch.
Ich vermute mal, Dir ist der Unterschied zwischen (formatbehafteten)
Zahlendarstellungen in Strings und (formatfreien) numerischen Werten, die in
Variablen vom Typ Single, Double, Decimal usw. gespeichert sind, nicht klar.
>
> Dabei wollte ich noch Bemerken, dass ich die "Replace"-Methode nicht
> verwenden wollte,
Das wäre auch keine brauchbare Lösung.
> da es ja auch einen anderen
> Weg geben muss.
Den gibt es.
Vorausgesetzt Deine Strings enthalten immer Zahlendarstellungen mit einem
"," (Komma) als Dezimaltrennzeichen, dann kannst Du diese Strings unabhängig
von der aktuellen Ländereinstellung (Culture) so zu einem numerischen Wert
vom Typ Decimal umwandeln.
Dim DENumberString as String
Dim Value As Decimal
Dim NFI As New NumberFormatInfo
DENumberString = "123,456"
With NFI
.NumberDecimalSeparator = ","
.NumberGroupSeparator = "."
End With
Value = Decimal.Parse(DENumberString, NFI)
Wenn Du einen numerischen Wert in einem String darstellen möchtest, der
unabhängig von der Ländereinstellung (Culture) immer ein Komma als
Dezimaltrenner enthält und als Gruppierungszeichen den Punkt, dann könnte
das z.B. so aussehen:
Dim DENumberString As String
Dim Number as Double
Dim NFI As New NumberFormatInfo
Number = 123.456
With NFI
.NumberDecimalSeparator = ","
.NumberGroupSeparator = "."
End With
DENumberString = Number.ToString("#,##0.0000", NFI)
NFI (NumberFormatInfo) sagt .Parse und/oder .ToString welche Zeichen als
Dezimaltrenner und als Gruppierungszeichen zu interpretieren bzw. auszugeben
sind und macht die Umwandlungen somit unabhängig von der jeweils aktuellen
Ländereinstellung bzw. Culture.
Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tips u. Beispielprogrammen)
.
- References:
- CultureInfo & Decimal.Parse
- From: Micha Voller
- CultureInfo & Decimal.Parse
- Prev by Date: Re: Werte aus Listbox in String mit Komme getrennt schreiben
- Next by Date: Re: Empfangen von EMails in .Net 2.0
- Previous by thread: Re: CultureInfo & Decimal.Parse
- Next by thread: Werte aus Listbox in String mit Komme getrennt schreiben
- Index(es):
Relevant Pages
|