Asp classic 如何使vbscript数据类型子类型变长以使其成为2147483647?
我有一个网页,从一个目录一次显示10个图像。 在目录中,我现在有55000张图片。 一旦下面的zz达到32767,它就会停止。 如何使ZZ成为子类型LONG,使其成为2147483647 (下面的代码不准确,只是快速完成以向您展示我正在实现的循环)Asp classic 如何使vbscript数据类型子类型变长以使其成为2147483647?,asp-classic,vbscript,comparison,type-conversion,comparison-operators,Asp Classic,Vbscript,Comparison,Type Conversion,Comparison Operators,我有一个网页,从一个目录一次显示10个图像。 在目录中,我现在有55000张图片。 一旦下面的zz达到32767,它就会停止。 如何使ZZ成为子类型LONG,使其成为2147483647 (下面的代码不准确,只是快速完成以向您展示我正在实现的循环) 实际问题与长类型无关——至少不是直接的。您的问题是,pp是一个字符串,而它应该是数字。要解决您的问题,只需将其转换为long: pp = CLng(Request("pp")) 那么比较就可以了 简言之,问题在于比较两个变量时——正如Eric Li
实际问题与长类型无关——至少不是直接的。您的问题是,
pp
是一个字符串,而它应该是数字。要解决您的问题,只需将其转换为long:
pp = CLng(Request("pp"))
那么比较就可以了
简言之,问题在于比较两个变量时——正如Eric Lippert在中所解释的那样,当一个变量包含字符串值,而一个变量包含数值,并且您对它们进行比较时,任何字符串都大于任何数字——因此无论zz
的值是多少,这意味着pp
总是会更大
现在来了解更详细的解释。(使用来自的一些帮助)
在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
其他需要牢记的事项:
@在阴影向导中,还应提醒OP,ASP中的所有值本质上都是Variant类型。它们被视为最窄的数据类型。@Nilpo很好。尽我所能解释,你是这些事情的大师,因此如果需要,请随意编辑并更正。:)@阴影向导正在等待批准。:)@Nilpo感谢您的专业编辑!然而,我仍然感到困惑。我将OP的问题缩小到一行:
zz=7000:pp=“6000”:如果zz>pp,那么MsgBox(“更大”)
执行此操作,您将看不到消息。如果直接执行如果7000>“6000”,然后执行MsgBox(“更大”)
,则会看到消息。你能解释一下这种奇怪的行为吗?就像VBScript的特性一样,Eric Lippert对此有自己的看法。基本上,VB6和VBScript处理涉及文字的比较与处理涉及变量的比较是不同的。
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