Re: CultureInfo & Decimal.Parse

Tech Tip: Click here to run a free scan for Windows Errors and optimize PC performance



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)

.



Relevant Pages

  • Re: date from different countries
    ... Change the initial date string and the 'foreign' culture to different values ... Private Function GetUSDateString(ByVal value As String) As String ... Dim _date As DateTime ... Catch _exxx As Exception ...
    (microsoft.public.dotnet.languages.vb)
  • Re: date from different countries
    ... MM/dd/yyyy) regardless of culture then one can use: ... One way of overcoming this issue is to pad the parts of the date string to ... I want to be able to enter a date in dd/mm/yyyy format but return a true ... Dim junk As Date ...
    (microsoft.public.dotnet.languages.vb)
  • show date in two languages
    ... i want to show the current date in two languages. ... culture and because this will become a function inside a usercontrol, ... Dim c As CultureInfo ... Dim sEnglish As String = Format ...
    (microsoft.public.dotnet.languages.vb)
  • Re: Determine culture of string
    ... Dim s As String = "some text" ... I think that there is not such thing as a culture of the string. ... It is the current thread that has a culture info attached and this info determines the way string *operations* work. ...
    (microsoft.public.dotnet.framework)
  • Search pattern
    ... Dim strfile As String ... Dim bAddressFound As Boolean ... Dim strCurrentChar As String ...
    (comp.databases.ms-access)