作业帮 > 综合 > 作业

VB里,怎么把常数2定义成双精度?

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/06/11 06:17:28
VB里,怎么把常数2定义成双精度?

下面是我编的程序,运行了,只算n=50的时候,n=1000就不算了,究竟怎么把常数2定义成双精度呢?

Dim yuanzhoulv As Double, n As Double

 


Private Sub Command1_Click()
yuanzhoulv = 2
For n = 1 To 2000
yuanzhoulv = yuanzhoulv * ((2 * n) ^ 2) / ((2 * n - 1) * (2 * n + 1))
If n = 50 Then
Text1.Text = yuanzhoulv
Else
    If n = 1000 Then
    Text1.Text = Text1.Text & Chr(13) + Chr(10) & yuanzoulv
    End If
End If
Next n

   
End Sub


你自己在VB的立即窗口测试一下:
Print 30000 * 2
这样是会提示“溢出”的,改成下面这样:
Print 30000 * 2# '或者Print 30000# * 2
就不会出错了.
原理是30000和2两个数都是整型数(Integer)范围,所以VB就按Integer来进行计算,但它们相乘的结果60000却超出了Integer的范围,所以就溢出了.只要把这两个数的任何一个设为双精度浮点数(也可以是长整型数或单精度数),VB就会按双精度数来计算结果,这样就不会溢出了.
所以题目中要你把2设为双精度型的意思,就是要你把2写成2#的形式,即:
yuanzhoulv = yuanzhoulv * ((2# * n) ^ 2) / ((2 * n - 1) * (2 * n + 1))
注意,只需要任何一个2写成2#即可,用不着四个2都写成2#
但是,具体到你这条题目,2是无须写成2#的,因为第一个乘数yuanzhoulv已经是双精度型变量了,所以VB肯定会按双精度型来计算的,所以你的这行代码是没错的.
纵观你的全部代码,问题有几个:
1、Text1的MulitLine属性一定要设为True,否则的话n=50和n=1000时的两次运算结果是会显示在同一行的,不会如你所愿分两行显示;
2、Text1.Text = Text1.Text & Chr(13) + Chr(10) & yuanzoulv 这行最后面的yuanzoulv应该是yuanzhoulv才对;
3、Chr(13) + Chr(10)可以用VB内部常数vbCrLf来代替.
其他就没什么问题了.