首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • excel中小数相加的问题
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jiminzhi
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-08-20 14:55:02 楼主
    47.415+26.5265vba判断就是不等于73.9415  到底是怎么回事呢?双精度的问题么?请求高人给解决
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ChinaOBS
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 3

      7

    发表于:2008-08-20 15:18:021楼 得分:0
    怎么会呢?下面的例子都输出:73.9415
    VB code
    Sub Test() Dim i As Double, j As Double i = 47.415 j = 26.5265 Debug.Print i + j Debug.Print 47.415 + 26.5265 End Sub
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • baoguangya
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-23 16:47:412楼 得分:0
    我试验了一下:

    iif(cdbl(47.415)+cdbl(26.5265)=cdbl(73.9415),"True","False")返回的是False


    iif(csng(47.415)+csng(26.5265)=csng(73.9415),"True","False")返回的是True

    可见,在双精度类型时,47.415+26.5265是不等于73.9415的。

    原因不明!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • gracexu
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-24 00:43:583楼 得分:0
    楼主说的没错,这个问题确实是由于双精度造成的.
    双精度就是浮点数,当我们很明确的十进制小数.比如 0.1 ,用计算机二进制表示成浮点数的时候反而是个无限循坏小数.
    换句话说,我们看上去很"精确"的十进制小数,表示成浮点数后反而会很复杂.
    浮点数的加减乘除,当两个操作数的指数不一样时,会出现很多奇怪的结果.楼上做的那个双精度下的比较就说明了这个问题,
    cdbl(47.415+26.5265-73.9415) 和
    cdbl(4.7415*10+26.5265-73.9415)
    两个结果也是不一样的,后者比前者要精确,因为把指数凑成一样的了.

    楼上其实已经给出了解法,不要做浮点数表示的比较了.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • baoguangya
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-26 10:54:024楼 得分:0
    可以结贴了!
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved