Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 12303|回复: 7

[已解决]取整后想保留两位小数,对第二位四舍五入取整,但用函数却不能对第二位按规则取整....

[复制链接]
发表于 2015-6-8 08:01 | 显示全部楼层 |阅读模式
本帖最后由 athuawind 于 2015-6-9 15:21 编辑

取整后想保留两位小数,对第二位四舍五入取整,但用函数却不能对第二位按规则取整,如附表中的一样,计算结果是0.85,但并未对其按四舍五入取整为0.90,请教这里的高手,有什么好办法吗!
取整问题.rar (5.59 KB, 下载次数: 6)
发表于 2015-6-8 08:34 | 显示全部楼层
  1. B5=ROUND(TEXT(B2-C2-D2,"0.000"),1)
复制代码
回复

使用道具 举报

发表于 2015-6-8 09:12 | 显示全部楼层
本帖最后由 as0810114 于 2015-6-8 09:14 编辑

应该是浮点运算的问题

回复

使用道具 举报

发表于 2015-6-8 10:16 | 显示全部楼层    本楼为最佳答案   
本帖最后由 爱疯 于 2015-6-9 15:45 编辑

以下只是个人理解,可能有错误的解释
- - - - - - - - - - - - - - - - - - - - - - - - - -
1)
Sub test()
    Debug.Print TypeName(85), VarType(85)    'vbInteger 2 整数
    Debug.Print TypeName(86.85), VarType(86.85)    'vbDouble 5 双精度浮点数
End Sub
从结果可知
85和1,都是整型
86.85,是双精度浮点型


- - - - - - - - - - - - - - - - - - - - - - - - - -
2)查VBA帮助中的数据类型,可知
Integer占2 个字节
Double占8 个字节


- - - - - - - - - - - - - - - - - - - - - - - - - -
3)
=B2-C2-D2
=86.85-85-1
数值之间,不同数据类型不能直接运算,需先执行"自动类型提升"(小向大提升)操作,该操作由系统自动完成。

85和1,占2个字节,好比能装2两饭的碗。
86.85,占8个字节,好比能装8两饭的碗。

自动类型提升就是把85和1,换成能装8两饭的碗(更大的碗必然可装下原先的值)。
现在是一样的碗,86.85-85-1就可直接运算。
结果装在一个能装8两饭的碗里。

对B2-C2-D2按F9可看到,0.849999999999994,说明这是经过自动类型提升后更精确的运算结果。
B4却是0.85,由于某种原因(单元格格式;或者excel最多保留15位有效数字;自动类型转换;...),总之损失了精度。


- - - - - - - - - - - - - - - - - - - - - - - - - -
4)解释B4,B5
B4
=B2-C2-D2
=86.85-85-1
=0.849999999999994
按B4单元格格式,自动保留2位小数后,得0.85


B5
=ROUND(B4,1)
=ROUND(0.849999999999994,1)
按ROUND函数,自动保留1位小数后,得0.80


- - - - - - - - - - - - - - - - - - - - - - - - - -
5)将精度设为所显示的精度
QQ截图20150608100656.jpg

勾上"将精度设为所显示的精度"后,在ROUND里的B4就不是0.849999999999994,而是B4显示的精度,0.85。
所以B5
=ROUND(B4,1)
=ROUND(0.85,1)
=0.90


为证明,我在B6加了一个函数
B6
=ROUND(B2-C2-D2,1)
=ROUND(0.849999999999994,1)
=0.80
由于ROUND的参数1是直接引用B2-C2-D2的结果,所以没有受"将精度设为所显示的精度"的影响。
取整问题2.rar (12 KB, 下载次数: 6)
回复

使用道具 举报

 楼主| 发表于 2015-6-9 15:00 | 显示全部楼层
爱疯 发表于 2015-6-8 10:16
以下只是个人理解,可能有错误的解释
- - - - - - - - - - - - - - - - - - - - - - - - - -
1)

谢谢,太精彩了,从原理到应用,解释得完美,原理虽然我还得慢慢体会,但却帮我解决了问题,真心感谢。
回复

使用道具 举报

 楼主| 发表于 2015-6-9 15:17 | 显示全部楼层
爱疯 发表于 2015-6-8 10:16
以下只是个人理解,可能有错误的解释
- - - - - - - - - - - - - - - - - - - - - - - - - -
1)

另外想请教一下,我这张表如果发给其它人,如果对方仍未勾选精度选项,是否会受到影响?
回复

使用道具 举报

发表于 2015-6-9 15:38 | 显示全部楼层
athuawind 发表于 2015-6-9 15:17
另外想请教一下,我这张表如果发给其它人,如果对方仍未勾选精度选项,是否会受到影响?

这么测试下,把4楼附件发给你身边的同事:
1)发之前,你同事的excel里该处应该是没勾的,因为默认没勾。
2)发之后,再打开这附件,应该是勾了的。


我试了下,别人收到的,是勾了的。
回复

使用道具 举报

 楼主| 发表于 2015-6-9 16:11 | 显示全部楼层
爱疯 发表于 2015-6-9 15:38
这么测试下,把4楼附件发给你身边的同事:
1)发之前,你同事的excel里该处应该是没勾的,因为默认没勾。 ...

好的,谢谢你
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-3-29 03:34 , Processed in 0.346994 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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