webForumDet fria alternativet

Matematik i ASP blir konstigt!

ASP

8 svar · 335 visningar · startad av M.Cheraghi

Medlem sedan juli 20015 107 inlägg
Frågan#1
UserImageX1 = request.form("UserImageX")
UserImageX2 = request.form("UserImagex2")
UserImageY1 = request.form("UserImageY")
UserImageY2 = request.form("UserImagey2")

[red][i]x2 = (UserImageX1 + UserImageX2)
Y2 = (UserImageY1 + UserImageY2)[/i][/red]

response.write UserImagex1 & " x1<br>"
response.write UserImagex2 & " x2<br>"
response.write UserImagey1 & " y1<br>"
response.write UserImageY2 & " y2<br>"
response.write "<br><br><br>"
response.write x2 & " X2 additionerad version<br>"
response.write Y2 & " y2 additionerad version<br>"

Det där är altså x1, x2, y1, y2

värderna separat för dessa är <300 per variabel på ett ungefär.
Men när jag adderar dessa värden i standard läge då värderna är:

x1 = 0
x2 = 90
y1 = 0
y2 = 110

så skriver mina response.write ut

0 x1
90 x2
0 y1
110 y2

090 X2 additionerad version
0110 y2 additionerad version

Vilket verkar vara i sin ordning, men jag vill _inte_ ha '0' innan värdet som precis har adderats. =/
Sen om jag ändrar x1 x2 y1 y2 istället för

x1 = 0
x2 = 90
y1 = 0
y2 = 110

Till följande

x1 = 47
x2 = 113
y1 = 31
y2 = 140

så blir det adderade värdet

47113 X2 additionerad version
31140 y2 additionerad version

Jag menar, hur i hela fridens namn kan 47 + 113 bli 47 tusen :OO

Medlem sedan mars 20025 907 inlägg
#2

Du binder ihop två strängar istället för att addera dess värden

x2 = (cint(UserImageX1) + cint(UserImageX2))
Y2 = (cint(UserImageY1) + cint(UserImageY2)<)
Medlem sedan juli 20015 107 inlägg
#3

Peeer skrev:

Du binder ihop två strängar istället för att addera dess värden

x2 = (cint(UserImageX1) + cint(UserImageX2))
Y2 = (cint(UserImageY1) + cint(UserImageY2)<)

Jo jag insåg det själv precis la märke till att 47 + 113 = 47113 :)
Men jag hade endå ingen aning om hur jag skulle ordna till det!
Servern krashade 2 gånger när jag försökte skapa en Jpeg bild med bredden 105.000 pixlar ;)
Tack för det snabba svaret!

Medlem sedan maj 200010 687 inlägg
#4

Använd CLng istället för CInt. CInt klarar inte av tal högre än 32767 vilket är lite snålt. Har dessutom hört att CLng skulle vara bättre prestandamässigt. I.o.f.s. väldigt marginellt.

Medlem sedan juli 20015 107 inlägg
#5

Erik Juhlin skrev:

Använd CLng istället för CInt. CInt klarar inte av tal högre än 32767 vilket är lite snålt. Har dessutom hört att CLng skulle vara bättre prestandamässigt. I.o.f.s. väldigt marginellt.

Okej :)
Det är nog lugnt jag ska nog inte har bilder som är större än 32767 pixlar ;) Till framtiden kan det vara bra, men eftersom du säger att det ger en pytteliten prestanda skillnad, så byter jag till CLng :)
Tackar!

Medlem sedan maj 200010 687 inlägg
#6

Det är bra att alltid köra med det. Då glömmer man inte det på något ställe. Jobbigt när databasen växt till t.ex. 40000 idn efter ett år och ingen fattar varför det helt plötsligt slutat funka. :)

Medlem sedan dec. 20003 887 inlägg
#7

Erik Juhlin skrev:

Använd CLng istället för CInt. CInt klarar inte av tal högre än 32767 vilket är lite snålt. Har dessutom hört att CLng skulle vara bättre prestandamässigt. I.o.f.s. väldigt marginellt.

När man ska räkna är det alltid bättre prestandamässigt (inte speciellt stora skillnader alltid) att använda sig av long, eftersom då behövs ingen konvertering från 32 bitar (eller vad nu processorn jobbar med) till något annat.

Medlem sedan nov. 20017 144 inlägg
#8

Och i vilket fall skall man då använda cInt()?

Medlem sedan maj 200010 687 inlägg
#9

I stort sett är det bäst att alltid köra med CLng. Jag tror aldrig jag använt CInt eller Integer i VB. :)

Int i SQL-server är 32 bitars precis som en Long. Gissar att det är likadant med andra DBMS.

Tips för att räkna ut hur stor tal man kan ha:
VB Integer: (2 ^ (16 - 1)) - 1
VB Long: (2 ^ (32 - 1)) - 1

244 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
115 ms — deklarationer (db)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)
117 ms — ändringar (db)