Single转换成Double时出现误差

类别:.NET开发 点击:0 评论:0 推荐:

手头上正在做一套住房公积金管理软件,碰到了数据精度的问题,偶然发现下面的情况:
代码:
Private Sub Command1_Click()
    Dim r1 As Single
    r1 = 0.1

    Dim result As Double

    result = 1 * r1
    Debug.Print result
End Sub

结果输出: .100000001490116
很显然,在计算的过程中,r1被从single转换成double类型后参与了计算,而转换的过程中出现了误差,为验证这一点,我修改了代码:
Private Sub Command1_Click()
    Dim r1 As Single
    r1 = 0.1
   
    Debug.Print CDbl(r1)
End Sub
结果输出: .100000001490116
果然是这样,这个结果让我大出意外,因为我的软件中一部分计算就是把Single类型的利率和Double型的应缴额放在一起进行的,而出现偏差就在所难免了。

为什么会出现误差呢?
MSDN中说:浮点(Single 和 Double)数比 Currency 的有效范围大得多,但有可能产生小的进位误差。

看来为了追求精度,最好把Double类型换成Currency类型,或者把Single类型换成与Double一致。

本文地址:http://com.8s8s.com/it/it42878.htm