Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp classic 如何使vbscript数据类型子类型变长以使其成为2147483647?_Asp Classic_Vbscript_Comparison_Type Conversion_Comparison Operators - Fatal编程技术网

Asp classic 如何使vbscript数据类型子类型变长以使其成为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

我有一个网页,从一个目录一次显示10个图像。 在目录中,我现在有55000张图片。 一旦下面的zz达到32767,它就会停止。 如何使ZZ成为子类型LONG,使其成为2147483647 (下面的代码不准确,只是快速完成以向您展示我正在实现的循环)


实际问题与长类型无关——至少不是直接的。您的问题是,
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
其他需要牢记的事项:

  • 包含单个值的变量可以是字符串或数字数据类型。这意味着诸如货币、日期和布尔值等数据类型本质上就是数字
  • 变体还可能包含对对象和数组的引用。与字符串一样,它们不能用于数字比较
  • VBScript提供用于比较非数值的特定函数和运算符
  • 因为VBScript不使用严格的数据类型,所以在比较不同精度的数字时,数据宽度不是一个问题。为了进行比较,两个操作数将以更宽的数据宽度进行比较。(算术运算也是如此。在这种情况下,结果值将具有更宽的数据宽度以保持精度。)

  • @在阴影向导中,还应提醒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