请问VB达人,数值的四舍五入怎么会留一个让人意想不到的尾巴?

来源:百度知道 编辑:UC知道 时间:2024/05/25 00:13:05
在VB6(SP6)中自定义一个四舍五入到小数点3位的函数:

Private Function myRound(myValue) As Single
myRound = Int(myValue * 1000 + 0.5) / 1000

End Function

在Form_Load中加入:
Private Sub Form_Load()
Dim Dbl As Double

Dbl = myRound(Sqr(2))
Debug.Print Dbl

End Sub

显示Dbl并非1.414,而是1.41400003433228,这是怎么回事?

用VB6自带的函数Round也是如此!
Private Sub Form_Load()
Dim Dbl As Double
Dim Sng As Single

Sng = Round(Sqr(2), 3)
Dbl = Round(Sng, 3)

Debug.Print Sng
Debug.Print Dbl

End Sub
数值的四舍五入怎么会留一个让人意想不到的尾巴?

你用formate 格式化一下( Debug.Print Dbl )试试~

因为你“Dim Dbl As Double”了!!!!!!!!!
这么简单!呵呵~双精度啦!

这和数据的存储空间大小有关系,Double占8 个字节。
可以通过整型转化下,比如:
若x=1.41400003433228
Clng(x * 1000) / 1000将得到1.414,依此类推。
或用Format(x, "#.000")格式下。

楼上几位还是没有回答为什么小数带尾巴的问题啊,等答案....

把这句Private Function myRound(myValue) As Single 改成Private Function myRound(myValue) As double
或者把 Dim Dbl As Double 改成Dim Dbl As single
2 者只要改其中一个就可以了

具体原因不明

我查了一些资料,这可能是single 和double数据转换的问题
只要有这样的转换好像就会有误差
比如:

Private Sub Form_Load()
Dim Dbl As Double
Dim Sng As Single

Sng = 1.23456789
Dbl = Sng
Debug.Print Dbl

End Sub

得到的Dbl为1.23456788063049

这是微软的VB或者说所有编程工具不可避免的误差吗?请高手解答