實際問題沒有什麼好用長型做 - 至少不直接。你的問題是pp
是一個字符串,它應該是數字。爲了解決您的問題,只是把它轉換爲長:
pp = CLng(Request("pp"))
則比較會工作得很好。
總之,問題是比較兩個變量時 - 如在this great blog post解釋由埃裏克利珀當一個變量包含一個字符串值和一個變量包含數值,您對它們進行比較,任何字符串比任何數量更大 - 所以不管zz
的價值是多少,這意味着pp
將永遠更大。
現在有更詳細的解釋。 (使用Nilpo的一些幫助)
在VBScript中,所有變量實際上都是類型Variant。它們是鬆散類型的,這意味着它們可以在任何點上保存任何類型的數據,並且可以更改它們包含的值的類型。
VBScript的比較運算符(<,>,<> =)用於進行數字比較。由於字符串不是數字數據類型,因此在將字符串與數字進行比較時,這些比較運算符永遠不會返回可用的結果。這並不意味着一個字符串不能包含數字值。它可以包含一串數字或字母,表示數字值,例如「4.56」,「4.5e3」或「15」。在這種情況下,VBScript提供了一系列轉換函數,用於指示VBS解釋器將值視爲特定類型。它還提供返回true或false的IsNumeric
函數,以指示字符串值是否可以視爲數字。
考慮到這一切,這樣做的正確方法應該是:
pp = Request("pp")
filecount = 0
Dim zz = 0
For Each file In filecoll
zz = zz + 1
'...
Next
If IsNumeric("pp") Then
If zz > CLng(pp) Then
Response.Write 'show image here
End If
Else
' pp is not a number, perhaps it is empty or contains bad characters
End If
其他的事情要記住:
- 一個包含單個值Variant是String或一個數字數據類型。這意味着諸如貨幣或日期和布爾值等數據類型本質上是數字。
- 變體還可能包含對對象和數組的引用。像字符串一樣,這些不能用於數字比較。
- Null,Empty和Nothing也是有效的值,用於指示變量的狀態。當一個變量沒有被分配一個實際的值時,這些被使用。作爲非數字,它們不能用於數字比較。
- VBScript提供了用於比較非數字值的特定函數和運算符。
- 因爲VBScript不使用嚴格的數據類型,所以在比較具有不同精度的數字時數據寬度不是問題。爲了比較,兩個操作數將在更寬的數據寬度上進行比較。(算術運算也是如此,在這種情況下,結果值會有更寬的數據寬度以保持精度)。
這就是我在找的,謝謝你的快速回復 – 2012-08-06 13:44:42
@Shadow Wizard,the還應該提醒OP,ASP中的所有值本質上都是類型Variant。它們被視爲可能的最窄數據類型。 – Nilpo 2012-08-06 16:05:29
@Nilpo好點。盡我所能解釋,儘管在這些事情上你是上師,所以如果需要,請隨時修改你的修正。 :) – 2012-08-06 19:47:22