lty1984 发表于 2012-12-11 22:03

求助啊,用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,很无奈
谁能找到问题麻烦帮下忙谢谢

lty1984 发表于 2012-12-12 11:36

自己顶一下,希望版主帮忙看下

omig001 发表于 2012-12-13 22:18

1、浮点计算最后一位是不准确的,所以有时候就会多出一串9或者一串0跟个1,应该包括basic都有这个问题。解决方法,你可以在返回值是用formatnumber限定位数,或者format等都可以了。
2、如果你那个数是中间数留着也无妨,没问题提的。
3、我也不太懂,提点建议,goto尽可能避免,一般只在on errorgoto 时使用一次。
4、抱歉,看晚了,令非常欢迎交流。

lty1984 发表于 2012-12-14 21:38

本帖最后由 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]
查看完整版本: 求助啊,用VB编程,子程序调用问题