Foxtable(狐表)用户栏目专家坐堂 → 运算溢出


  共有2231人关注过本帖树形打印复制链接

主题:运算溢出

帅哥哟,离线,有人找我吗?
狐表(小白)
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:368 积分:3973 威望:0 精华:0 注册:2019/9/17 10:06:00
运算溢出  发帖心情 Post By:2020/5/11 23:18:00 [只看该作者]

老师,这是什么情况?当产品分类选择的不是“复合”、“实木”和“原木”的时候就弹出以下提示!

图片点击可在新窗口打开查看此主题相关图片如下:qq图片20200511231637.png
图片点击可在新窗口打开查看


datacolchanged代码如下:
'某一列的内容被更改后执行,此时列的内容已经是更改后的值
Dim dr As DataRow = e.DataRow
Select Case e.DataCol.Name
'门超尺加价    
Case "洞高","洞宽","产品分类","产品名称"
    Dim cmd As New SQLCommand
    cmd.C
    cmd.CommandText = "SELECT 超高参考值 F ROM [test].[dbo].[XS_门超尺加价]  where  材质类型='" & dr("产品分类") & "' "
    dr("超高参考值") = cmd.ExecuteScalar()
    Dim cmd1 As New SQLCommand
    cmd1.C
    cmd1.CommandText = "SELECT 超宽参考值 F ROM [test].[dbo].[XS_门超尺加价]  where  材质类型='" & dr("产品分类") & "' "
    dr("超宽参考值") = cmd1.ExecuteScalar()
    Dim cmd2 As New SQLCommand
    cmd2.C
    cmd2.CommandText = "SELECT 超高加减费用 F ROM [test].[dbo].[XS_门超尺加价]  where  材质类型='" & dr("产品分类") & "' "
    dr("超高加减费用") = cmd2.ExecuteScalar()
    Dim cmd3 As New SQLCommand
    cmd3.C
    cmd3.CommandText = "SELECT 超宽加减费用 F ROM [test].[dbo].[XS_门超尺加价]  where  材质类型='" & dr("产品分类") & "' "
    dr("超宽加减费用") = cmd3.ExecuteScalar()
    Dim cmd4 As New SQLCommand
    cmd4.C
    cmd4.CommandText = "SELECT 加减费递增尺寸 F ROM [test].[dbo].[XS_门超尺加价]  where  材质类型='" & dr("产品分类") & "' "
    dr("加减费递增尺寸") = cmd4.ExecuteScalar()
    Dim Val As Double= (dr("洞高")-dr("超高参考值"))/dr("加减费递增尺寸")
    Dim Lng As Long = Math.Ceiling(Val)
    Dim Val1 As Double= (dr("洞宽")-dr("超宽参考值"))/dr("加减费递增尺寸")
    Dim Lng1 As Long = Math.Ceiling(Val1)
If dr("产品名称") like "木门" And dr("洞高")-dr("超高参考值") > 0 Or dr("洞宽")-dr("超宽参考值") > 0 then
   If dr.IsNull("产品分类") = false AndAlso dr.IsNull("产品名称")=False AndAlso dr.IsNull("洞高")=False AndAlso dr.IsNull("洞宽")=False then
       dr.Save() '必须保存一下
       If dr("产品分类") like "*复合*" Then
          dr("门超尺加价") = (lng * dr("超高加减费用")) + (lng1 * dr("超宽加减费用")) 
            dr.Save() '必须保存一下 
       End If
       If dr("产品分类") like "*实木*" Then
          dr("门超尺加价") = (lng * dr("超高加减费用")) + (lng1 * dr("超宽加减费用")) 
            dr.Save() '必须保存一下
       End If    
       If dr("产品分类") like "*原木*" Then
          dr("门超尺加价") = (lng * dr("超高加减费用")) + (lng1 * dr("超宽加减费用")) 
            dr.Save() '必须保存一下
       End If
    End If 
Else
       dr("门超尺加价") = Nothing
       dr.Save() '必须保存一下
End If  
End Select


[此贴子已经被作者于2020/5/11 23:33:07编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
sloyy
  2楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2180 积分:13810 威望:0 精华:2 注册:2012/2/25 10:59:00
  发帖心情 Post By:2020/5/11 23:25:00 [只看该作者]

不是明明白白的告诉你了吗?你的自定义函数出错了,应该是某个应该有的参数没有值,导致运算错误

 回到顶部
帅哥哟,离线,有人找我吗?
狐表(小白)
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:368 积分:3973 威望:0 精华:0 注册:2019/9/17 10:06:00
  发帖心情 Post By:2020/5/11 23:29:00 [只看该作者]

谢谢,问题我又补充了代码,麻烦指点一下!

 回到顶部
帅哥哟,离线,有人找我吗?
sloyy
  4楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2180 积分:13810 威望:0 精华:2 注册:2012/2/25 10:59:00
  发帖心情 Post By:2020/5/12 1:43:00 [只看该作者]

加减费递增尺寸 有为零的情况

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107135 积分:544918 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/5/12 8:33:00 [只看该作者]

1、除法必须判断除数是否为0,计算机里除以0会出现无穷大,当然会溢出。
如:
Dim Val As Double= 0
if dr("加减费递增尺寸") <> 0 then
    Val = (dr("洞高")-dr("超高参考值"))/dr("加减费递增尺寸")
end if
2、确定计算不会超过双精度能够表示的范围,如果超过把双精度改为高精度类型

 回到顶部
帅哥哟,离线,有人找我吗?
狐表(小白)
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:368 积分:3973 威望:0 精华:0 注册:2019/9/17 10:06:00
  发帖心情 Post By:2020/5/12 9:57:00 [只看该作者]

谢谢

 回到顶部
帅哥哟,离线,有人找我吗?
狐表(小白)
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:368 积分:3973 威望:0 精华:0 注册:2019/9/17 10:06:00
  发帖心情 Post By:2020/5/12 9:57:00 [只看该作者]

谢谢

 回到顶部