找到两个数字之间不同的小数点后的数字位置

时间:2014-07-02 16:57:59

标签: excel excel-formula

我正在尝试找到一个公式来查找小数点后第一个数字的位置,这个位置在两个numbres之间是不同的,例如:

5.4452和5.4413将返回给我3(即小数点后的第三个数字不同)。在excel中有一种简单的方法吗?

感谢。

5 个答案:

答案 0 :(得分:2)

这会将每个数字的文本版本与15位有效小数进行比较:

=IF(A1=A2,"match", 
MATCH("diff", 
IF(MID(TEXT(A1,".000000000000000"),{3,4,5,6,7,8,9,10,11,12,13,14,15},1)<> 
MID(TEXT(A2,".000000000000000"),{3,4,5,6,7,8,9,10,11,12,13,14,15},1),"diff",) 
,0))

这是Mark Ba​​lhoff的编辑,似乎适用于所有情况:

=IF(MOD($A1,1)=MOD($A2,1),"match",
MATCH("diff",
IF(MID(TEXT(MOD($A1,1),"0.000000000000000"),{3,4,5,6,7,8,9,10,11,12,13,14,15},1)<> 
MID(TEXT(MOD($A2,1),"0.000000000000000"),{3,4,5,6,7,8,9,10,11,12,13,14,15},1),"diff",)
,0))

答案 1 :(得分:1)

我无法想到一个简单的方法,但如果你真的需要用Excel公式来做,你可以使用辅助单元格:

假设单元格A4和B4中有两个数字:

  • 用连续数字填充一行(让我们假设为1):

    0 1 2 3 4 5 6 7 8 9

  • 使用以下公式填充单元格B2:

    =(INT($ A $ 4 * 10 ^ A $ 1)= INT($ B $ 4 * 10 ^ A $ 1))* 1

    并复制公式做正确。

  • 您想要的号码是:

    = SUM(A2:J2)

如果要检查更多小数位,只需在右侧添加更多单元格。

编辑:如果数字相等则返回您要检查的小数位总数,如果数字不共享相同的整数部分,则返回0。

答案 2 :(得分:1)

尝试以下 UDF

Public Function compare(r1 As Range, r2 As Range) As Variant
    Dim l1 As Long, l2 As Long, i As Long
    If InStr(1, r1.Value, ".") = 0 Or InStr(1, r2.Value, ".") = 0 Then
        compare = "point missing"
        Exit Function
    End If
    v1 = Split(CStr(r1.Value), ".")(1)
    v2 = Split(CStr(r2.Value), ".")(1)
    l1 = Len(v1)
    l2 = Len(v2)
    For i = 1 To 9999
        If i > l1 Or i > l2 Then
            compare = "compare failed"
            Exit Function
        End If
        m1 = Mid(v1, i, 1)
        m2 = Mid(v2, i, 1)
        If m1 <> m2 Then Exit For
    Next i
    compare = i
End Function

用户定义函数(UDF)非常易于安装和使用:

  1. ALT-F11调出VBE窗口
  2. ALT-I ALT-M打开了一个新模块
  3. 粘贴内容并关闭VBE窗口
  4. 如果保存工作簿,UDF将随之保存。 如果您在2003年之后使用的是Excel版本,则必须保存 该文件为.xlsm而不是.xlsx

    删除UDF:

    1. 按上述方式调出VBE窗口
    2. 清除代码
    3. 关闭VBE窗口
    4. 从Excel使用UDF:

      =比较(A1,A2)

      要了解有关宏的更多信息,请参阅:

      http://www.mvps.org/dmcritchie/excel/getstarted.htm

      http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

      http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx

      有关UDF的详细信息

      必须启用宏才能使其生效!

答案 3 :(得分:1)

最终,我认为如果您决定在不使用VBA的情况下使用Excel中的公式来完成此任务,则该任务可能需要一些蛮力。我并不是说没有对数操作来完成这项工作(而且我已经足够了解数学书呆子以便稍后处理这个问题)但你最终可能会遇到如下蛮力:

=IF(ROUNDDOWN(K5,1)<>ROUNDDOWN(L5,1),1,IF(ROUNDDOWN(K5,2)<>ROUNDDOWN(L5,2),2,IF(ROUNDDOWN(K5,3)<>ROUNDDOWN(L5,3),3,IF(ROUNDDOWN(K5,4)<>ROUNDDOWN(L5,4),4,IF(ROUNDDOWN(K5,5)<>ROUNDDOWN(L5,5),5,0)))))

答案 4 :(得分:1)

数组公式** 似乎有效:

= MATCH(TRUE,MMULT(IFERROR(0 + MID(MID(A1:B1,FIND(&#34;&#34;,A1:B1)+1,1000),ROW(INDIRECT(&# 34; 1:1000&#34;)),1),0),{1; -1})&LT;&GT; 0,0)

此致

**数组公式的输入方式与&#39;标准&#39;相同。公式。您只需按住CTRL和SHIFT键,然后按ENTER键,而不是按ENTER键。如果您已正确完成,您会注意到Excel在公式周围放置了大括号{}(尽管不要尝试自己手动插入这些括号)。