.NET开发

本类阅读TOP10

·NHibernate快速指南(翻译)
·vs.net 2005中文版下载地址收藏
·【小技巧】一个判断session是否过期的小技巧
·VB/ASP 调用 SQL Server 的存储过程
·?dos下编译.net程序找不到csc.exe文件
·通过Web Services上传和下载文件
·学习笔记(补)《.NET框架程序设计(修订版)》--目录
·VB.NET实现DirectDraw9 (2) 动画
·VB.NET实现DirectDraw9 (1) 托管的DDraw
·建站框架规范书之——文件命名

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
Single转换成Double时出现误差

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

手头上正在做一套住房公积金管理软件,碰到了数据精度的问题,偶然发现下面的情况:
代码:
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一致。




相关文章

相关软件