参考链接: https://gewuweb.com/office365/2445.html
**我的目标:**让中国的大学生走出校门的那一刻就已经具备这些Office技能,让职场人士能高效使用Office为其服务。支持鹏哥,也为自己加油!
有时候,我们总会遇到一些莫名其妙的问题,被折腾的精疲力尽,唉,简直比结婚那天都累……
比如下面这个:
大家都知道,当Vlookup第四位参数为0时,是精确匹配,我们看看,当A1中直接输入0.3,根据D3就能成功匹配到1,可是当我们在A1里输入0.1+0.2时,发现E2中匹配不到正确的结果了?
难道0.1+0.2不等于0.3?不会引发世界之争吧!
世界之大,真是无奇不有!做个表格搞得跟研究哥德巴赫猜想一样复杂!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OX7LevjF-1650256203952)(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==)]
想要真正搞懂为啥在Excel中输入0.1+0.2,结果看似0.3,实则其结果和0.3有微乎其微的一小点误差的原因?首先要搞懂计算机中是怎么存储数据的。
别想的那么复杂,认真读下去,你会明白的。
大家都知道,我们通常用的计算机在存储数据时是以二进制的方式存储,而我们工作中通常用的是十进制的数据,所以我们把十进制的数据输入计算机以后,计算机会把其转换为二进制,然后再行处理。
具体怎么转换的?
十进制的整数转化二进制采用“除2取余,逆序排列”法。
看下面的例子:
把十进制的15转化为二进制表达:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wqXgiE5Q-1650256203953)(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==)]
连续除以2取余数,直到商为0,然后把余数倒叙排列,所以十进制的15转化为二进制就是1111,如上图。
Excel里的函数DEC2BIN可以将十进制的整数转换为二进制,大家可以自己试试。
把十进制的小数转换为二进制数字采用的是“乘2取整,顺序排列”法。
看下面的例子:
把十进制的0.75转化为二进制
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Sszc2oyO-1650256203954)(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==)]
0.75乘以2取整,剩下的部分乘以2再取整,直到剩下的部分为0,所以0.75转化为二进制就是0.11。
理解了上面的原理以后,我们尝试着将小数0.2转化为二进制的数字:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JJKO6KrO-1650256203954)(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==)]
我的天哪!居然发现陷入了一个死循环,0.0011001100110011……
这下计算机该怎么存储呢?总不能也跟着无限循环下去吧,那不要爆了吗?所以就有了浮点数。
就像我们平常在Excel里输入一个比较大的数字时系统会自动用科学计数法计数:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qnnbu4Ux-1650256203956)(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==)]
我们总要想办法存储这种小数位数无限多的数字吧,所以用浮点数来近似来的表达某个实数。
由于这个实数是由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,相对定点数来说,它的小数点的位置不确定,所以叫浮点。
所以浮点数只是个近似的值,当它参与运算的时候就定会产生浮点误差。
那怎么解决这种误差呢?
方法1:可以用Round函数强制性四舍五入,如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xdSbkf7G-1650256203956)(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==)]
方法2:四舍六入五成双
原则:需要保留数字的后一位数字小于4时舍去,大于6进位,等于5时分两种情况,如果5后面是非零数值,那么进位,如果5后面是0,那么又分两种情况,保留数字为偶数就舍去,为奇数就进位。
看点实际的例子:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-22Wmi320-1650256203957)(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==)]
用公式如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d3PNIvtO-1650256203958)(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==)]
=ROUND(A2,2)-(MOD(A2*103,20)=5)*10(-2)
**方法 3:**以显示精度为准(从微软支持摘抄过来的)
在某些情况下,您可以使用“以显示精度为准”选项来防止四舍五入错误影响您的工作。此选项会强制将工作表中每个数字的值成为显示的值。要打开此选项,请按照下列步骤操作:
-
在 Excel 2003 和更早的版本中,在“工具”菜单上单击“选项”。
-
在“重新计算”选项卡上,单击“以显示精度为准”复选框以将其选中。
-
在 Excel 2007 中,单击“Office 按钮”,单击“Excel 选项”,然后单击“高级”类别。
-
在“计算此工作簿时”部分中,选择所需的工作簿,然后选中“将精度设为所显示的精度”复选框。
例如,如果选择显示两位小数的数字格式,然后打开“以显示精度为准”选项,则在您保存工作簿时,所有超出两位小数的精度均将会丢失。此选项影响活动的工作簿(包括所有工作表)。您无法撤消此选项和恢复丢失的数据。建议您在启用此选项之前保存工作簿。
通常用Round就可以解决,但是要求比较高的话可以考虑用第二种,第三种类似第一种,但是不可撤销,较少用。
本节的分享就到这里,鹏哥祝大家每天都有进步。
加入米宏Office培训群,每天进步一点点!
从基础操作到VBA,
两杯咖啡的钱,
换取一份如此详细的Excel视频资料,
你还在犹豫?
每天进步一点,每天提升一点!
参考来源: https://gewuweb.com/sitemap.html