设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2434|回复: 8
打印 上一主题 下一主题

[其它] 文本型数据转数值型作减数后出现细微差异

[复制链接]
跳转到指定楼层
1#
发表于 2009-9-3 14:39:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 apsfxc1 于 2009-9-4 09:16 编辑

2000.11 - Str(2000)=0.1099999999
2000.11 - Val(Str(2000))=0.10999999
2000.11 - CCur(Str(2000))=0.11

第2个用val()后为什么还不是0.11,就因这个差异导致这次所得税少扣1分,应纳税额81.70*0.05=4.085=4.09 却变成81.6999999*0.05=4.084999995=4.08

免征额2000作为一个随时可变数以文本格式放在一张表里,计算所得税时调用,调用时用val()转换为数值,当被减数有小数时如2000.11减文本转数值的2000时,会出现尾数,大家可以试建个窗体放上命令键写上 Msgbox  2000.11 - Val(Str(2000))看看结果

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 1经验 -10 收起 理由
Henry D. Sy -10 文不对题

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2009-9-3 15:11:47 | 只看该作者
考虑一下是不是数据精度问题引起的,另外,把各数据设为双精度试试看看。
3#
 楼主| 发表于 2009-9-3 15:16:48 | 只看该作者
那2000作为一个随时可变数以文本格式放在一张表里,计算所得税时调用,调用时用val()转换为数值
4#
发表于 2009-9-3 15:23:57 | 只看该作者
上传附件!
5#
发表于 2009-9-3 15:27:12 | 只看该作者
本帖最后由 djt 于 2009-9-3 15:30 编辑

如果数据类型不设为currency,而是single或者双精度,会出现这个问题,建议类型改为currency,或者用round(钱,2)函数来取2位小数,但是round()函数还有个问题,如果最后一位数字是5的话,不会四舍五入,比如round(4.085,2) VBA的结果是4.08,不是4.09,解决方法是后面多加 0。0000001
6#
发表于 2009-9-3 22:12:25 | 只看该作者
请更改标题
7#
 楼主| 发表于 2009-9-4 09:18:03 | 只看该作者
这个标题也许能说清楚一点
8#
 楼主| 发表于 2009-9-4 09:20:57 | 只看该作者
如果数据类型不设为currency,而是single或者双精度,会出现这个问题,建议类型改为currency,或者用round(钱,2)函数来取2位小数,但是round()函数还有个问题,如果最后一位数字是5的话,不会四舍五入,比如round(4.08 ...
djt 发表于 2009-9-3 15:27


用round()是不行的,会出现更大差异,奇进偶不进
9#
发表于 2009-9-4 10:55:20 | 只看该作者
Debug.Print 2000.11 - CCur(2000)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-14 12:05 , Processed in 0.106591 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表