VB6.0中的问题

来源:百度知道 编辑:UC知道 时间:2024/05/21 06:37:37
VB6.0中的问题,代码如下:
Private Sub Command1_Click()
Text4 = CStr((Val(Text1) - Val(Text2)) / 2 - Val(Text3))
End Sub
或是:
Private Sub Command1_Click()
Text4 = (Text1 - Text2) / 2 - Text3
End Sub
注:其中text1中输入0.5,text2中输入0.4,text3中输入0.05,计算结果在text4中显示不是0,而是-1.38777878078145E-17,为什么?哪里有错?
1、以上几位回答好像不准确,其原因我已知道应该是因为----浮点数不是精确数,存在误差。
2、但还不知道怎么避免,就是说我该如何实现小数的精确计算呢,即:该等0时就等0,该等小数时就等小数(小数点后不要随意省略或四舍五入)
3、"qiqing122"的方法好像有效,先谢了,但我还是没弄明白更本原因,在更复杂的运算中该如何避免呢?

Text4.Text = CStr((Val(Text1.Text) - Val(Text2.Text)) / 2 - Val(Text3.Text))
别忘了加.Text!

程序改为
Private Sub Command1_Click()
Text4 = val((Text1 - Text2) / 2 )- Text3
End Sub

这个就是正确的
算出来就是0

结果是那样的了,哪个数字是计算机中对0的表示了吧!已经很小了!
估计是计算机中对小数的部分的存储不同于整数导致的吧!!

字符型与数值型能计算出一个正常的数值来吗?

结果没错,那是0.5 0.4 0.05三个10进制数,在计算底层运算时是以二进制数进行运算的。用以下代码处理:

Private Sub Command2_Click()
Text4 = Int(((Val(Text1) - Val(Text2)) / 2 - Val(Text3)) * 1000) / 1000
End Sub