Hea*_*Vay 2 vbscript comparison type-conversion asp-classic comparison-operators
我有一个网页,一次从目录显示10个图像.在目录中我现在有55,000张图片.一旦zz低于32,767,它就会停止.如何将ZZ变为LONG子类型以使其为2,147,483,647(下面的代码不准确,只是快速完成以向您展示我正在实现的循环)
pp = Request("pp") ' pp could be at 40000
filecount = 0
dim zz
For Each file in filecoll
zz = zz + 1
If ZZ > PP then
response.write 'show image here
end if
Next
Run Code Online (Sandbox Code Playgroud)
实际问题与长型无关 - 至少不是直接的.你的问题是它pp是一个字符串,而它应该是数字.要解决您的问题,只需将其转换为long:
pp = CLng(Request("pp"))
Run Code Online (Sandbox Code Playgroud)
那么比较就可以了.
简而言之,问题在于比较两个变量 - 正如Eric Lippert 在这篇伟大的博客文章中所解释的那样,当一个变量包含一个字符串值而一个变量包含数值而你比较它们时,任何字符串都大于任何数字 - 所以无论如何它的价值是zz什么意味着pp永远更大.
现在进行更详细的解释.(使用Nilpo的帮助)
在VBScript中,所有变量实际上都是Variant类型.它们是松散类型的,这意味着它们可以在任何点保存任何类型的数据,并且可以更改它们包含的值的类型.
VBScript的比较运算符(<,>,<>,=)用于进行数字比较.由于字符串不是数字数据类型,因此在将字符串与数字进行比较时,这些比较运算符将永远不会返回可用的结果.这并不意味着字符串不能包含数值.它可以包含一串数字或字母,表示数字值,例如"4.56","4.5e3"或"十五".在这种情况下,VBScript提供了一系列转换函数,指示VBS解释器将值视为特定类型.它还提供IsNumeric返回true或false 的函数,以指示字符串值是否可以视为数字.
考虑到所有这些,正确的方法是:
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
Run Code Online (Sandbox Code Playgroud)
其他要记住的事项: