Följande kod återskapar problemet! Kan någon svara på varför det blir såhär? Testa att göra om dem till tal med cLng eller cDbl innan du plussar ihop dem. Jag har testat de flesta varianter av cLng, cDbl och allt vad de heter. Ytterligare en test enligt nedan ger 2469134. Jag ser inte, fattar inte, mönstret med komma, punkt och hur man ändrar "123.4567" till 123.4567 så att ASP/VBS räknar rätt. VBS är lite jobbigt när det gäller strängar och operatorn + Tack både Frerik och Martin för Era svar! Val utgår från punkt som decimalseparator. Jag rekomenderar därför följande kod: Jag får bara "inkompatibla typer" av Val(). Jag tror att Val() inte finns i VBScript och i ASP, utan bara i VB.Räkna i ASP eller VBS
<code>
Num1 = "123.4567"
Num2 = "123.4567"
WScript.Echo "Ska bli 246,9134"
WScript.Echo Num1 + Num2 ' Blir 123.4567123.4567
WScript.Echo replace(Num1,".",",") + replace(Num2,".",",") ' Blir 123,4567123,4567
WScript.Echo (Num1*1) + (Num2*1) ' Blir 2469134
WScript.Echo (replace(Num1,".",",")*1) + (replace(Num2,".",",")*1) ' Blir 246,9134
</code>
Med följande blir det givetvis något helt annat.
<code>
Num1 = 123.4567
Num2 = 123.4567
</code>
Jag kör Win XP på svenska.Sv: Räkna i ASP eller VBS
//Anna-KarinSv:Räkna i ASP eller VBS
<code>
WScript.Echo cLng(Num1) + cLng(Num2) ' Blir 2469134
WScript.Echo cDbl(Num1) + cDbl(Num2) ' Blir 2469134
num3 = cLng(Num1)
num4 = cLng(Num2)
num5 = cDbl(Num1)
num6 = cDbl(Num2)
WScript.Echo num3 + num4 ' Blir 2469134
WScript.Echo num5 + num6 ' Blir 2469134
</code>Sv: Räkna i ASP eller VBS
Huvudidén är att om de båda termerna går att konvertera till tal så blir resultatet en beräkning med tal annars en konkatenering av strängar.
dvs
"1" + "2" = 3
"A" + "B" = "AB"
(Personligen tycker jag att det vore bättre om "1" + "2" blir "12")
Ditt problem är antagligen sättet som VBS avgör om en sträng går att konvertera till ett tal eller inte. Detta beror på datorns nationella inställningar.
I Sverige där vi använder decimalkomma anses "1,2" vara ett tal medan "1.2" inte är ett tal.
I USA där man använder decimalpunkt är det tvärt om.
Eftersom du nu har två strängar som innehåller tal formatterade på amerikanskt vis kommer de inte anses vara tal på en dator med svensk inställning.
Prova följande kod
<code=vb>
Function CDblPoint(str)
Dim original
original = SetLocale("en-us") ' ställ om till amerikansk formattering
CDblPoint = CDbl(str)
SetLocale(original) ' återställ
End Function
msgbox CDblPoint("123.4567")
</code>Sv:Räkna i ASP eller VBS
Martins funktion fungerar fint men jag ser fortfarande inte mönstret. Man kanske inte kan se mönster med VBS, det verkar ju göra lite som det vill ibland. Martin skriver att i Sverige där vi använder decimalkomma anses "1,2" vara ett tal medan "1.2" inte är ett tal. Jag får följande:
<code>
SetLocale("en-us")
WScript.Echo "10,5" + "10,5" ' Blir 10,510,5
WScript.Echo 10,5 + 10,5 ' Blir 10 15 5
WScript.Echo "10.5" + "10.5" ' Blir 10.510.5
WScript.Echo 10.5 + 10.5 ' Blir 21
SetLocale("sv-se")
WScript.Echo "10,5" + "10,5" ' Blir 10,510,5
WScript.Echo 10,5 + 10,5 ' Blir 10 15 5
WScript.Echo "10.5" + "10.5" ' Blir 10.510.5
WScript.Echo 10.5 + 10.5 ' Blir 21
</code>
Ingen skillnad alltså för dessa varianter. Här är dock en skillnad, som Martins funktion även visar:
<code>
SetLocale("en-us")
WScript.Echo CDbl("10.5") + CDbl("10.5") ' Blir 21
SetLocale("sv-se")
WScript.Echo CDbl("10.5") + CDbl("10.5") ' Blir 210
</code>
Hur var det med CDbl och max- och minvärden, det var väl bara CLng som måste ha tal inom visst intervall?Sv: Räkna i ASP eller VBS
Function Number(value)
Number = Val(Replace(value, ",", "."))
End Function
Dim Num1
Dim Num2
Num1 = Number("123.4567")
Num2 = Number("123.4567")
WScript.Echo "Ska bli 246,9134"
WScript.Echo Num1 + Num2
Sv:Räkna i ASP eller VBS