ASP中的一个小小问题

来源:百度知道 编辑:UC知道 时间:2024/05/16 20:13:32
我做一个报表,其中有个结果是通过公式计算几个字段值得到的,这些字段都是数值型的。
这个公司是
a/(b+c+d)/3*100,但为了保证得到正确的值,最好公式是:
FormatNumber(ccur(trim(rs("a")))/((ccur(trim(rs("b")))+ccur(trim(rs("c")))+ccur(trim(rs("d"))))/3)*100,1,-1)&"%
现在的问题是,如果abcd都等于0,那么最后结果就会报错:溢出
现在的问题是:
问题1:a1=FormatNumber(rs("a"),1,-1) 我可以这样写吗?
问题2:我这样写是对的吗?
<%
a1=FormatNumber(rs("a"),1,-1)
b1=FormatNumber(rs("b"),1,-1)
c1=FormatNumber(rs("c"),1,-1)
d1=FormatNumber(rs("d"),1,-1)
e1=a1/(b1+c1+d1)/3*100

if a1=0 and b1=0 and c1=0 then

e1=0
else
……(就是E1为正常计算值,我不知道怎么写了)
end if

问题3:你们会怎么写??谢谢各位??急啊!!!!!

trim(str)函数是用来去掉字符串str前后的空格的,ccur(str)是将字符串转换成货币型

回答下面的问题前先分析一下FormatNumber(ccur(trim(rs("a")))/((ccur(trim(rs("b")))+ccur(trim(rs("c")))+ccur(trim(rs("d"))))/3)*100,1,-1)出错的原因:
如果abcd都等于0,那上面的FormatNumber里面的第一个参数就相当于0/(0+0+0)/3*100,除数为0,所以最后结果就会报错:溢出!

问题1:你可以那样写!事实证明,只要rs("a")能转换成数字,FormatNumber(rs("a"),1,-1)就是对的,不过得到的结果是字符串而不是数字。

问题2:
FormatNumber(ccur(trim(rs("a")))/((ccur(trim(rs("b")))+ccur(trim(rs("c")))+ccur(trim(rs("d"))))/3)*100,1,-1)是先进行计算,再把结果进行格式化,而问题2里面是先进行格式化,再进行计算,因为FormatNumber返回的结果是字符串,所以(b1+c1+d1)就是字符串相加,而不是数字相加,即使能得到结果,结果也没有进行格式化,更不是我们想要的结果。

问题3:
我们只要判断一下除数是否为0就可以(假设我们把结果保存在已经定义的变量e里面):
e=ccur(trim(rs("b")))+ccur(trim(rs("c")))+ccur(trim(rs("d")))
if e=0 then
'对除数为o的情况进行处理,如果要让结果为0的话那就什么都不用写了。
response.write "除数为0" '提示除数为0,如果不要,去掉此行就可以了。