【问题标题】:Excel if equal and match are not return the same thingExcel如果相等和匹配不返回相同的东西
【发布时间】:2014-04-07 21:15:48
【问题描述】:

我在单元格 A1 和 B1 中放置了两个日期时间值。日期时间正好是 41703.0416666667。一个是从 SQL 数据库输出的,另一个是手动编写的。

=if(A1=B1,1,0) 的结果是 1。 =MATCH(B1,A1,0) 的结果是#N/A。

有人对为什么会发生这种情况有任何理论吗?

【问题讨论】:

  • 您确定两个时间值完全相同吗?如果我将41703.0416666667 复制到电子表格的两个单元格中并像您一样进行匹配,我会得到 1。
  • 您好,感谢您的回复。假设我的解释不够充分,那么在逐个执行这些步骤时,它确实有效。也许我应该更详细地说,单元格 A1 中的内容来自 mySQL 数据库的输出。

标签: excel if-statement match


【解决方案1】:

问题在于浮点计算(请参阅http://support.microsoft.com/kb/78113),一种可能的解决方法是使用round() 函数。在您的情况下,四舍五入到 10 位或 12 位小数可能足以解决该问题。

【讨论】:

  • 您好,感谢您提供的信息。我已经尝试使用 round() 到 10 位小数。它没有解决问题。当我将单元格的值复制粘贴到记事本时,两者都会产生完全相同的数字。
【解决方案2】:

可能是十进制转换为二进制的问题。查看相关答案:

Simple HLOOKUP Failing with Excel 2010

这似乎是以二进制形式存储浮点数的限制 - 如下所述:http://support.microsoft.com/kb/214118

浮点数算术运算的多种组合 在 Microsoft Excel 和 Microsoft Works 中可能会产生出现的结果 少量不正确。例如,方程 =1*(.5-.4-.1) 可以计算为数量 (-2.78E-17),或 -0.0000000000000000278 而不是 0。

这个问题也不是excel独有的,而是以下原因造成的:

IEEE 754 规定数字以二进制格式存储以减少 存储要求并允许内置二进制算术 所有微处理器上都可用的指令来处理 以相对快速的方式获取数据。然而,有些数字是 简单的、不重复的十进制数被转换为重复的 无法完全准确存储的二进制数。

【讨论】:

  • 同意 Stepan,另一个关于浮点问题的消息来源:support.microsoft.com/kb/78113
  • 同意这很可能是问题,因为匹配正确地发生在 41703.375 但是有解决这个问题的方法吗?
  • @gstanley 出于比较相等性或执行 LOOKUP 类型函数的目的,我认为您可以将它们转换为长整数。(所以没有小数)。如果您有使用日期/时间的其他计划并且您绝对需要该级别的准确性,那么有一些方法可以最大限度地减少风险不准确性,但它们不会消除准确性问题:en.wikipedia.org/wiki/… - 另请参阅:stackoverflow.com/questions/14859875/…
猜你喜欢
  • 2010-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-25
  • 1970-01-01
  • 1970-01-01
  • 2020-11-14
相关资源
最近更新 更多