Upptäckt problem med omvandling av sträng till double. Val() funktionen använder alltid punkt som decimalseparator. Meddans CLng(), CDbl(), osv. Använder sig av det nationella inställningarna. Tackar Andreas, använder sedan tidigare din lösning med byte av tecken vid andra tillfällen, men känns ändå som en nödlösning här. Hej Ska det inte vara: Finns det ingen politiker här på pellesoft som kan lägga in en motion i Riksdagen om att vi ändrar och går över till punkt i stället för komma som decimalseparator.Omvandling till double blir knas
Läser in parameterar från fil, textsträng inläst "1.02"
Försökte omvandla denna med CDbl men blev knas
Testar då med följande snutt.
Dim sValue As string
Dim dValue As Double
sValue = "1.02"
dValue = CDbl(sValue)
då blir dValue 102 (fel)
men testar jag med
dValue = Val(sValue)
så blir det 1,02 (rätt)
Måste man byta decimalseparator, till punkt, för att CDbl skall fungera riktigt eller finns det någon parameter som behöver sättas om i VB för rätt funktion?
Eller är CDbl fel att använda ? trodde den var till för denna typ av konvertering ?
(Om jag i filen använt 1,02 hade det nog fungerat i Sverige men knappast internationellt)Sv: Omvandling till double blir knas
Denna funktion kanse kan vara till hjälp:
<code>
Public Function Number(Value As String) As Double
Number = Val(Replace(Value, ",", "."))
End Function
</code>
Du kan prova med olika inställningar av decimal separator.
Detta är en besvärlig fråga om talet innehåller tusenavgränsare. Amerikanerna använder komma som tusenavgränsare och punkt som decimal avgrännsare. Vilket inte gör det till bara en enkel ersättningsfårga.Sv: Omvandling till double blir knas
Om det verkligen är så har Microsoft verkligen misslyckats med att bygga lösningar för internatinell användning speciellt det du skrev om tusenavgränsare. Lämpligen borde man skriva en egen funktion för CDbl som tar hänsyn till hur inställngarna i datorn är gjorda. (liknande den du skrev, men i ett mattebibliotek)
Kan bara rysa av tanken att få in tal i systemet typ
123,456.78 brrrrrrrrrrrrr. Sv: Omvandling till double blir knas
Ja detta eviga problem,man får nog inse att det är Vi som är
avvikande som använder (,) komma.Jag har hittat en filosofi som
jag alltid använder konsekvent .Datormatematik så gäller (.) punkt.
Därför gäller Val .Ditt exempel behandlar jag efter denna princip.
Option Explicit
Private Sub Command1_Click()
Dim sValue As String
Dim dValue As Double
sValue = Replace("1,02", ",", ".")
dValue = Val(sValue)
Label1.Caption = dValue
End Sub
Du kan kolla användarens decimalinställning med detta test.
If Format$(0, ".") = "," Then
'Användaren har komma (,)
Else
'Användaren har punkt (.)
End If
/SvenSv: Omvandling till double blir knas
<code>
If Format$(0, ".") = "," Then
'Användaren har komma (,)
Else
'Användaren har komma (.)
End If
</code>Sv: Omvandling till double blir knas
Verkar vara enklare än att få datorsystem att rätta sig efter vad som gäller, men nu skriker säkert flera FOLKOMRÖSTNING, men kanske lättare att få igenom än EMU och gemensam valuta, va? blev det inte dollar !?