各位帮帮忙,急急急。。。n5=cdbl(n1*n2+n3+n4) and 65535,当n1*n2+n3+n4太大时报溢出?

yyb2000 2000-07-03 10:33:00
...全文
129 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Un1 2000-07-04
  • 打赏
  • 举报
回复
使用and时,vb会自动做clng和cbool转换,如果double值大于&h7fffffff或小于&h80000000当然要出错。
yyb2000 2000-07-04
  • 打赏
  • 举报
回复
liyang:
如下不能通过
dim a,b as double
a=65535# * 65535#
b=myand(a,65535)
liyang 2000-07-03
  • 打赏
  • 举报
回复
只好自己写一个
Private Function MyAnd(ByVal varSour As Variant, ByVal varMod As Variant) As Long

Dim I As Long
Dim bytTemp() As Byte
Dim dblRem As Double, dblRem2 As Double
Dim lResult As Long
Dim lReturn As Long
Dim n3 As Double
Dim lModLen As Long

ReDim bytTemp(0)
dblRem = varSour
Do Until dblRem < 2
dblRem2 = Int(dblRem / 2)
bytTemp(UBound(bytTemp)) = dblRem - dblRem2 * 2
ReDim Preserve bytTemp(UBound(bytTemp) + 1)
dblRem = dblRem2
Loop
bytTemp(UBound(bytTemp)) = dblRem

Dim bytMod() As Byte
Dim dblTemp1 As Double, dblTemp As Double
ReDim bytMod(0)
dblTemp = varMod
Do Until dblTemp < 2
dblTemp1 = Int(dblTemp / 2)
bytMod(UBound(bytMod)) = dblTemp - dblTemp1 * 2
ReDim Preserve bytMod(UBound(bytMod) + 1)
dblTemp = dblTemp1
Loop
bytMod(UBound(bytMod)) = dblTemp
lModLen = UBound(bytMod)

For I = 0 To IIf(UBound(bytTemp) > lModLen, lModLen, UBound(bytTemp))
lResult = lResult Or bytTemp(I) * 2 ^ I
Next I
MyAnd = lResult And varMod

End Function
yyb2000 2000-07-03
  • 打赏
  • 举报
回复
我早试过,不行,
n5=cdbl(n1)*cdbl(n2)+cdbl(n3)+cdbl(n4) 时不会报错,一但
n5=(cdbl(n1)*cdbl(n2)+cdbl(n3)+cdbl(n4)) and 65535,wrong?
liyang 2000-07-03
  • 打赏
  • 举报
回复
是这样:cdbl(n1)*cdbl(n2)+cdbl(n3)+cdbl(n4),即把每个变量均转化为不超限制的类型。
liyang 2000-07-03
  • 打赏
  • 举报
回复
你的 n1,n2,n3,n4是何类型。可以n1#*n2#+n3#+n4#,把每一个转化为double

28,390

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧