求助啊,用VB编程,子程序调用问题
最近用VB编程,编了个插值的子程序,但是每次调用之后插值出来的结果都是无限循环小数,总是后面带一堆99999的数,我认为是函数的参数调用方面出了问题,但又找不到问题在哪,求各位大大帮忙解决下程序代码在下面
Sub QXCZ(JN%, X!(), Y!(), U, f)
If U <= X(1) Then GoTo 200
If U > X(JN) Then GoTo 300
For J = 1 To JN - 1
If U > X(J) And U <= X(J + 1) Then GoTo 400
Next
GoTo 66
200X1 = X(1)
X2 = X(2)
Y1 = Y(1)
Y2 = Y(2)
GoTo 6
300X1 = X(JN - 1)
X2 = X(JN)
Y1 = Y(JN - 1)
Y2 = Y(JN)
GoTo 6
400X1 = X(J)
X2 = X(J + 1)
Y1 = Y(J)
Y2 = Y(J + 1)
6 f = (Y2 - Y1) / (X2 - X1) * (U - X1) + Y1
66 End Sub
主程序里调用语句是这样的:
Call QXCZ(22, bati, s110, bat, s1)
bat1和s110是数组,数据如下:
bat1:0.5400,0.5600,0.5800,0.6000,0.6200,0.6400,0.6600,0.6800,0.7000,0.7200,0.7400,0.7600,0.7800,0.8000,0.8200,0.8400,0.8600,0.8800,0.9000,0.9200,0.9400,0.9600,
s110:0.0632,0.0649,0.0663,0.0677,0.0685,0.0704,0.0716,0.0728,0.0739,0.0750,0.0761,0.0771,0.0781,0.0790,0.0799,0.0808,0.0817,0.0825,0.0834,0.0841,0.0849,0.0856,
其中bat是输入的数,s1是我要插值得出的数,可是比如说我bat输入0.54,s1我插值出来的数就是6.319999999999999999,很无奈
谁能找到问题麻烦帮下忙谢谢
自己顶一下,希望版主帮忙看下 1、浮点计算最后一位是不准确的,所以有时候就会多出一串9或者一串0跟个1,应该包括basic都有这个问题。解决方法,你可以在返回值是用formatnumber限定位数,或者format等都可以了。
2、如果你那个数是中间数留着也无妨,没问题提的。
3、我也不太懂,提点建议,goto尽可能避免,一般只在on errorgoto 时使用一次。
4、抱歉,看晚了,令非常欢迎交流。
本帖最后由 lty1984 于 2012-12-14 21:43 编辑
omig001 发表于 2012-12-13 22:18 static/image/common/back.gif
1、浮点计算最后一位是不准确的,所以有时候就会多出一串9或者一串0跟个1,应该包括basic都有这个问题。解决 ...
我估计是子程序参数调用的过程中出现的问题,解决方法我把子程序里的X1,X2,Y1,Y2都加上了val(),这样解决了末尾很多9的问题,不过我不知道为什么,能帮看下吗?
至于插值结果大100倍的问题我也看了,我的待插值bat值是个无限循环小数,因此得出的插值结果比我预期的大了100倍,我在前面计算出bat 的时候用round函数让其保留有限位数的小数点,就可以解决了,不过我依然不知道这是为什么,只是猜着做的,能帮我分析下为什么吗?
页:
[1]