我想知道是否有人可以帮助我,因为我对我认为是一个简单错误的简单原因视而不见。
我有这段代码:
doRound1(x1)
denom1 = 5
y1 = denom1 - x1 mod denom1
if y1 <> denom1 then
x1= x1+y1
end if
doRound1=x1
End function
'theCalc = 20488888888.684
theCalc = cDbl(11111111111) * 1.844
doRound1(theCalc)
我收到此错误
Microsoft VBScript runtime error '800a0006'
Overflow: 'x1'
上面代码中的这一行引起:
y1 = denom1 - x1 mod denom1
有什么想法吗?就像我说的那样,我已经失明了。
答案 0 :(得分:4)
答案似乎在PRB: "Overflow" with Integer Division and MOD Operator:
Visual Basic帮助主题 Mod运算符和整数除法 operator()解释说如果浮动 点数用于 表达,他们被转换为 渴望第一。因此,如果浮动 点数大于 最大值 (2,147,483,647),或者小于 最小值 (-2,147,483,648),溢出错误 会发生。
答案也在那里:
以下代码演示了如何操作 执行整数除法和模数 算术时的操作数大小 是足够大的原因 溢出:
Dim dblX as Double
Dim dblY as Double
dblX = 2147483648 ' numerator
dblY = 123 ' denominator
' round off the numerator and denominator (ensure number is .0)
dblX = INT(dblX + .5)
dblY = INT(dblY + .5)
' Emulate integer division
MsgBox FIX(dblX / dblY)
' Emulate modulo arithmetic
MsgBox dblX - ( dblY * FIX(dblX / dblY) )
答案 1 :(得分:1)
我相信当你没有专门定义这些值时,ASP Classic假设一个数值是一个int(只有32767)。尝试强迫你的价值观长久
Function doRound1(x1)
x1 = CDbl(x1)
denom1 = CDbl(5)
y1 = denom1 - x1 mod denom1
if y1 <> denom1 then
x1= x1+y1
end if
doRound1=x1
End function
注意:我实际上没有测试过这个。