西莫电机圈

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

手机号码,快捷登录

查看: 1137|回复: 3

[求助] 求助啊,用VB编程,子程序调用问题

[复制链接]

该用户从未签到

发表于 2012-12-11 22:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
最近用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
200  X1 = X(1)
     X2 = X(2)
     Y1 = Y(1)
     Y2 = Y(2)
     GoTo 6
300  X1 = X(JN - 1)
     X2 = X(JN)
     Y1 = Y(JN - 1)
     Y2 = Y(JN)
     GoTo 6
400  X1 = 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,很无奈
谁能找到问题麻烦帮下忙谢谢
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过

该用户从未签到

 楼主| 发表于 2012-12-12 11:36 | 显示全部楼层
自己顶一下,希望版主帮忙看下
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

该用户从未签到

发表于 2012-12-13 22:18 | 显示全部楼层
1、浮点计算最后一位是不准确的,所以有时候就会多出一串9或者一串0跟个1,应该包括basic都有这个问题。解决方法,你可以在返回值是用formatnumber限定位数,或者format等都可以了。
2、如果你那个数是中间数留着也无妨,没问题提的。
3、我也不太懂,提点建议,goto尽可能避免,一般只在on error  goto 时使用一次。
4、抱歉,看晚了,令非常欢迎交流。
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

该用户从未签到

 楼主| 发表于 2012-12-14 21:38 | 显示全部楼层
本帖最后由 lty1984 于 2012-12-14 21:43 编辑


我估计是子程序参数调用的过程中出现的问题,解决方法我把子程序里的X1,X2,Y1,Y2都加上了val(),这样解决了末尾很多9的问题,不过我不知道为什么,能帮看下吗?
至于插值结果大100倍的问题我也看了,我的待插值bat值是个无限循环小数,因此得出的插值结果比我预期的大了100倍,我在前面计算出bat 的时候用round函数让其保留有限位数的小数点,就可以解决了,不过我依然不知道这是为什么,只是猜着做的,能帮我分析下为什么吗?
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|西莫电机圈 ( 浙ICP备10025899号-3 浙公网安备:33028202000436号

GMT+8, 2024-11-22 20:07 , Processed in 0.095857 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表