以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  运算溢出  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=149766)

--  作者:狐表(小白)
--  发布时间: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
--  发布时间:2020/5/11 23:25:00
--  
不是明明白白的告诉你了吗?你的自定义函数出错了,应该是某个应该有的参数没有值,导致运算错误
--  作者:狐表(小白)
--  发布时间:2020/5/11 23:29:00
--  
谢谢,问题我又补充了代码,麻烦指点一下!
--  作者:sloyy
--  发布时间:2020/5/12 1:43:00
--  
加减费递增尺寸 有为零的情况
--  作者:有点蓝
--  发布时间: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、确定计算不会超过双精度能够表示的范围,如果超过把双精度改为高精度类型

--  作者:狐表(小白)
--  发布时间:2020/5/12 9:57:00
--  
谢谢
--  作者:狐表(小白)
--  发布时间:2020/5/12 9:57:00
--  
谢谢