我如何使一个vbscript数据类型子类型LONG得到它是2,147,483,647?

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)

Sha*_*ard 7

实际问题与长型无关 - 至少不是直接的.你的问题是它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)

其他要记住的事项:

  1. 包含单个值的Variant是String或数字数据类型.这意味着货币,日期和布尔等数据类型本身就是数字.
  2. 变体也可能包含对象和数组的引用.与字符串一样,这些不能用于数字比较.
  3. Null,Empty和Nothing也是要考虑的有效值,用于指示变量的状态.当变量未赋值时,使用这些值.由于是非数字的,它们不能用于数字比较.
  4. VBScript提供了用于比较非数字值的特定函数和运算符.
  5. 由于VBScript不使用严格的数据类型,因此在比较具有不同精度的数字时,数据宽度不是问题.为了进行比较,将在更宽的数据宽度上比较两个操作数.(对于算术运算也是如此.在这种情况下,结果值将具有更宽的数据宽度以保持精度.)