ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
Python自动化办公应用大全 Excel 2021函数公式学习大典 Kutools for Office 套件发布 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: eh864166675

[求助] RANK函数,分数一样,排名不一样,为什么会有这种情况?如何解决?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-11-14 16:26 | 显示全部楼层
精确位数不同造成的

RANK问题附件.rar

6.18 KB, 下载次数: 5

TA的精华主题

TA的得分主题

发表于 2019-11-14 17:20 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 流浪铁匠 于 2019-11-14 17:22 编辑

http://club.excelhome.net/thread-1482267-1-1.html
我在这篇帖子里解释过这个性质
excel的浮点精度是可以突破15位的
而有些函数识别这种精度差异,有些函数不识别
前面诸位前辈的countif就是不识别的
但rank,frequency,match,mode,vlookup等函数识别这种精度差异
QQ截图20191114172125.png

TA的精华主题

TA的得分主题

发表于 2019-11-14 21:01 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 丢丢表格 于 2019-11-15 14:03 编辑

14 F  流浪铁匠  分析在理 。

TA的精华主题

TA的得分主题

发表于 2019-11-15 12:31 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 流浪铁匠 于 2019-11-28 12:12 编辑

如果是数据类型的话
rank,frequency,mode这些只识别数值的函数是不应该出现这种差异的
所以本质就是精度问题,这个性质是微软挖的坑,一直没填
最简单的例子是0.1+0.2(仅针对excel,wps没有这种问题)
=(0.1+0.2)=0.3 在excel里结果为true,而且=0.1+0.2的值把小数位数调高到20位还是0.3
然而如果用部分函数来测试,会识别出0.1+0.2和0.3的差异
据说js里0.1+0.2的值是0.30000000000000004
众所周知,由于excel15位精度限制问题,在excel里只能返回0.3,但高于15位精度的差异被保留下来,而这个精度差异部分函数测试下来还是可以识别的
1.png

也就是说excel是存在高于15位的浮点精度的,然而有些函数识别这种差异,有些函数不识别(或者由于函数性质很难判断有无这种性质)

这个问题经常能碰到,而且通过测试发现会影响公式结果的函数有
match,frequency,mode(mode.mult),rank,vlookup,delta(这个可以用于判断2个值是否有无这种差异)等等
常见于涉及时间或者软件导出的数据

4.png 注意这个公式里使用了*1 ,而还能返回2个结果,除了说明这部分函数能识别这种精度差异外,也可以说明四则运算不能修正excel里的这种高精度浮点

另外等号的判断是不精确的,
排除大小写字符差异和真空单元格的特性
还是有一些等号的比较是存在问题的(特殊字符)

2.png    3.png

测试表明
文本比较exact
数值比较delta
才是准确的比较
当然另外一种解决方式就是上面诸位老师使用的countif函数等不识别这种高精度浮点性质的函数的替代解决方式


这种精度差异可以用=0.1+0.2测试,取消公式后的值和0.3比较存在精度差,不需要涉及任何特殊格式之类的影响,
不过这种高于15位的精度差异确实也可以用来分列功能来处理



评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-11-15 13:54 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
3楼的公式可以解决。

TA的精华主题

TA的得分主题

发表于 2019-11-15 13:55 | 显示全部楼层
这是按照大小顺序排列的,如果不是的话,还是一个问题。

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-4-18 14:55 | 显示全部楼层
dipperrrr 发表于 2019-11-14 09:29
=COUNTIF(A:A,">"&A2)+1
这样试试?

还是不行
A5、A6还是显示排名4
而且A13、A14变成排名12了

TA的精华主题

TA的得分主题

发表于 2025-4-18 17:07 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
标记,学习

TA的精华主题

TA的得分主题

发表于 2025-4-18 17:27 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
=MATCH(A2:A15,SORT(UNIQUE(A2:A15),1,-1),0)
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-12-14 08:43 , Processed in 0.032982 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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