excel - Excel中匹配函数的精度错误
问题描述
我有一个数据框,比如来自 A1:C100,其中每个单元格都是一个值(不是从任何公式派生的),恰好存储为百分比。我复制并粘贴数据框中的一列值(例如列 A),将其从最大到最小排序,然后将其粘贴到列 E 中。然后我使用=MATCH(E1, $A$1:$A$100, 0)
,它按预期工作并返回正确的行。
但是,如果我随后为 E 中的每个值添加一个常数,例如列 F 是=E+1
,并且使用=MATCH(F1-1, $A$1:$A$100, 0)
大约 90% 的值仍然是正确的,但有些返回 #N/A。
如何在不更改原始数据框的情况下解决此问题?我已经尝试将数据四舍五入到各种精度点(例如=MATCH(ROUND(F1-1,4), $A$1:$A$100, 0)
),或者使用非精确匹配(例如=MATCH(F1-1, $A$1:$A$100, 1)
,甚至类似的东西=MATCH(F1-.999, $A$1:$A$100, -1)
)但没有运气。
任何其他建议/其他人曾经遇到过这样的事情吗?根本问题是什么?
解决方案
您的精度校正的问题在于它仅应用于 Match 函数的“查找”组件。要获得更准确的“匹配”率,建议您在源头四舍五入正在“搜索”的值,或者简单地部署以下内容:
= Match(round(range_1,6), round(range_2,6), 0)
您可以根据您的示例/q 将 range_1、range_2 替换为相关/相应的范围。
注意 - 在源代码处执行此操作的优势(即插入一个附加列,例如 range_3,其中 range_3 = round(range_2,6),然后在上面的等式中用 range_3 替换 range_2)涉及计算速度(这将是快得多,特别是如果 range_2 相当长,例如 >30k 行)。这样做的原因应该很明显:匹配函数中的计算对执行的每个匹配/单元格重复,而“源”版本只会应用“一次”计算(即跨所有有问题的行/单元格)。
希望这是有道理的,祝您工作顺利。
PS - 如有必要,将 round(range,6) 更改为 round(range,4)。出于验证原因,在条件格式中使用类似的东西时,我通常喜欢 6 dps...
塔,J
推荐阅读
- python - Spyder IDE 抱怨无法检测到未定义的名称
- c# - 设置 PictureBox[i] System.NullReferenceException 的图像
- javascript - Java和Javascript之间的加密和解密不起作用
- javascript - Mongoose CastError 更新时
- sed - 如何使用 sed 从 hex 文件中提取数据
- ios - 将编辑后的照片与拍摄的照片一起保存
- mvvmcross - MvvmCross nuget 包和 MvvmCross.Core 说明
- mongodb - 如何在 docker-compose.yml 中为 mongodb 创建少量用户?
- arrays - jq保留数组边界
- ubuntu-18.04 - Conky:写入错误:错误的文件描述符