Hi, also ich hab nochmal ein wenig herumprobiert… Komischerweise, wenn ich bei den Regionalen Einstellungen meines Windows (XP Pro Deutsch) das Dezimaltrennzeichen auf „.“ stelle funktioniert es egal ob ich Punkt oder Komma verwende! Steht es auf „,“ will CDbl einen „,“-Wert… Komisch, oder?
Hallo,
Wenn ich die Zeile versuche, schreibt er mir nur ein Object
Required, scheint also nicht mit meinem VB6 zu funktionieren…
Aber ne universelle Lösung wär natürlich Top
ja, die kommt noch, ich war gestern Abend nur zu müde, um noch eine Zeile zu tippen und im Moment brennt hier die Luft. Ich habe noch für 10 Stunden Arbeit und noch fünf Stunden Zeit.
Das muss leider bis zum WE warten. Über die API (funktioniert außer in VBS immer) werden das ein paar Zeilen Code mehr.
Gruß Rainer
Hallo Peter!
Genau so ist es
Gilt aber auch für andere Ländereinstellungen sinngemäss.
Na das ist ja ein ganz schöner Murks.
Schaut ganz nach Microsoft aus: „Gut gemeint, aber eigentlich unbrauchbar“
mfg
christoph
Hallo!
Dieses Thema hat mir seit gestern keine Ruhe gelassen. Folgende zwei Lösungsmöglichkeiten möchte ich auch noch präsentieren:
Überprüfen der CDbl-Funktion
Ist eine sehr unsaubere Methode. Würde ich nur, wenn wirklich nichts anders möglich, verwenden.
If CDbl(1.4) = 14 Then stWert = Replace(stWert, ".", ",")
dblWert = CDbl(stWert)
Verwenden der Val-Funktion
Eine Spur eleganter, da die Funktion Val() immer das amerikanische Dezimaltrennzeichen frisst, egal was im Betriebssystem eingestellt ist.
If InStr(stWert, ",") \> 0 Then stWert = Replace(stWert, ",", ".")
dblWert = Val(stWert)
mfg
christoph
Hallo Christoph,
Dieses Thema hat mir seit gestern keine Ruhe gelassen.
Folgende zwei Lösungsmöglichkeiten möchte ich auch noch
präsentieren:Überprüfen der CDbl-Funktion
Ist eine sehr unsaubere Methode. Würde ich nur, wenn wirklich
nichts anders möglich, verwenden.If CDbl(1.4) = 14 Then stWert = Replace(stWert,
„.“, „,“)
dblWert = CDbl(stWert)
hmmm, geht … Aber ich gebe Dir Recht, behagt mir auch nicht so Recht.
Verwenden der Val-Funktion
Eine Spur eleganter, da die Funktion Val() immer das
amerikanische Dezimaltrennzeichen frisst,
egal was im Betriebssystem eingestellt ist.If InStr(stWert, „,“) > 0 Then stWert =
Replace(stWert, „,“, „.“)
dblWert = Val(stWert)
Stimmt, das ist viel schöner. Da überlege ich doch, ob ich meine Lösung mit GetLocaleInfo() wirklich noch schreibe. Ein besseres Ergebnis bekomme ich damit auch nicht, nur ein paar Zeilen Code mehr.
Gruß Rainer
Hi Christoph,
If InStr(stWert, „,“) > 0 Then stWert = Replace(stWert, „,“, „.“)
wozu extra abfragen ob ein Komma drin ist?
dblWert = val(Replace(stWert, „,“, „.“))
LG Alex
Universallösung …
Hallo,
Wenn ich die Zeile versuche, schreibt er mir nur ein Object
Required, scheint also nicht mit meinem VB6 zu funktionieren…
Aber ne universelle Lösung wär natürlich Top
was ich vor hatte ist viel zu kompliziert und unnötig, ich lass es.
Sieh mal …
/t/rechnen-mit-kommazahlen-aus-textbox/4806258/26
Besser geht nicht.
Gruß Rainer
was ich vor hatte ist viel zu kompliziert und unnötig, ich
lass es.
Mist Mist Mist… hab ich das zu früh gepostet
LG Alex
Hi Alex,
was ich vor hatte ist viel zu kompliziert und unnötig, ich
lass es.Mist Mist Mist… hab ich das zu früh gepostet
ja, wenn es denn noch interessiert …
Ich hab’s als Modul für VB6 gebaut, da ist das schön kompakt.
In der Form:
Option Explicit
Private Sub Command1\_Click()
Label1.Caption = StrToDbl("12.34")
End Sub
Und das Modul:
Option Explicit
Private Declare Function GetSystemDefaultLCID Lib \_
"kernel32" () As Long
Private Declare Function GetLocaleInfo Lib "kernel32" \_
Alias "GetLocaleInfoA" (ByVal Locale As Long, \_
ByVal LCType As Long, ByVal lpLCData As String, \_
ByVal cchData As Long) As Long
Const LOCALE\_SDECIMAL = &HE
Public Function StrToDbl(ByVal Text As String) As Double
Dim TZ As String
Dim SZ As String
TZ = GetEntry(LOCALE\_SDECIMAL)
SZ = Chr(Asc(TZ) Xor 2)
StrToDbl = CDbl(Replace(Text, SZ, TZ))
End Function
Private Function GetEntry(ID&:wink: As String
Dim LCID&, Result&, Buffer$, Length&
LCID = GetSystemDefaultLCID()
Length = GetLocaleInfo(LCID, ID, Buffer, 0) - 1
Buffer = Space(Length + 1)
Result = GetLocaleInfo(LCID, ID, Buffer, Length)
GetEntry = Left$(Buffer, Length)
End Function
Gruß Rainer
Hallo zusammen,
hier noch eine Version, bei der es völlig
egal ist, welches Trennzeichen als Komma
verwendet wird. Viel mir gerade ein, ist
zwar umständlich, dafür „schluckt“ sie
z.B. Eingaben wie
0,453435 1234#2323 .23 1273. 0ü123
LG Alex
Public Function fnStrToDbl(z As String) As Double
Dim a, v, n As String
Dim i As Integer
v = z
n = "0"
For i = 1 To Len(z)
a = Mid(z, i, 1)
If a "9" Then
v = "0" & Left(z, i - 1)
n = Mid(z, i + 1) & "0"
Exit For
End If
Next i
fnStrToDbl = CDbl(CLng(v) + CLng(n) / 10 ^ Len(n))
End Function