gpt4 book ai didi

asp-classic - 我如何使 vbscript 数据类型子类型 LONG 使其成为 2,147,483,647?

转载 作者:行者123 更新时间:2023-12-04 13:39:18 28 4
gpt4 key购买 nike

我有一个网页,一次显示目录中的 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

最佳答案

实际问题与 long 类型无关——至少不是直接的。你的问题是 pp是一个字符串,而它应该是数字。要解决您的问题,只需将其转换为长:

pp = CLng(Request("pp"))

然后比较就可以正常进行了。

简而言之,问题出在比较两个变量时 - 如 this great blog post 中所述当一个变量包含字符串值和一个变量包含数值时,Eric Lippert 比较它们,任何字符串都大于任何数字 - 所以无论 zz 的值是多少|这意味着 pp永远会更大。

现在进行更详细的解释。 (使用来自 Nilpo 的一些帮助)

在VBScript 中,所有变量实际上都是Variant 类型。它们是松散类型的,这意味着它们可以随时保存任何类型的数据,并且它们包含的值的类型可以更改。

VBScript 的比较运算符(<、>、<>、=)用于进行数值比较。由于字符串不是数字数据类型,因此在将字符串与数字进行比较时,这些比较运算符永远不会返回可用的结果。这并不意味着字符串不能包含数值。它可以包含一串数字或代表数值的字母,例如“4.56”、“4.5e3”或“15”。在这种情况下,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

其他注意事项:

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

关于asp-classic - 我如何使 vbscript 数据类型子类型 LONG 使其成为 2,147,483,647?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11829192/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com