Excel 2010 将单元格内容中的科学记数法方程转换为十进制表示

Posted

技术标签:

【中文标题】Excel 2010 将单元格内容中的科学记数法方程转换为十进制表示【英文标题】:Excel 2010 Convert scientific notation equation in cell contents into decimal representation 【发布时间】:2018-01-23 19:39:31 【问题描述】:

我有一个包含近 400 个方程式的电子表格。电子表格的创建者从另一个来源复制/粘贴了值。有几个在其可变系数中使用科学计数法。我正在寻找一种将它们转换为十进制表示法的方法,以便我可以将它们存储在数据库中并使用动态 sql 执行。

这是我所拥有的一个例子

y = -6E-05x4 + 0.0272x3 - 1.4546x2 - 17.743x + 8137.3

我希望它是这样的

y = -0.00006x^4 + 0.0272x^3 - 1.4546x^2 - 17.743x + 8137.3

方程列被 Excel 视为“常规”列。我尝试更改列类型,希望 Excel 能够识别该函数并转换系数,但它不会。我试图不必重新编写所有这些方程式手动转换科学记数法。我也愿意使用第三方软件将科学记数法转换为十进制表示。

【问题讨论】:

所有方程都是多项式吗?你的方程中有最大数量的项吗?多项式是否总是“按顺序”(x^4,然后是 x^3,然后是 x^2...等等)? y = -0.00006Ex^4 + ... E 打错了吗? 你试过什么?我只是拆分部分并使用 VBA 将每个部分转换为双精度。您可能可以使用复杂的公式来做到这一点。 @TimWilliams 是的,这是一个错字。它是固定的。感谢您指出。 @ImaginaryHuman072889 所有方程都是多项式。到目前为止,它们都是“有序的”,但由于是人类输入它们,我能要求的最好的方法是确保它们都井然有序。 【参考方案1】:

您可以使用 VBA UDF(用户定义函数)来执行此操作。 我

使用正则表达式解析以科学记数法输入的任何数字 将它们转换为十进制数 用十进制值替换原来的值

大于约 10^28 的值将保持不变。小于约 10^-28 的值将被转换为零 (0)。


Option Explicit
Function ConvertToDecimal(S As String) As String
    Dim RE As Object, MC As Object, M As Object
    'Regex pattern to extract Scientific numbers
    Const sPat As String = "[-+]?\d+(\.\d+)?[Ee][+-]\d+"
    Dim sRepl As String, I As Long

Set RE = CreateObject("vbscript.regexp")
With RE
    .Global = True
    .Pattern = sPat
    If .Test(S) = True Then
        Set MC = .Execute(S)
            sRepl = S
            For Each M In MC
                On Error Resume Next
                    sRepl = Replace(sRepl, M, Format(CDec(M), "#,##0.0" & WorksheetFunction.Rept("#", 30)), 1, 1)
                    Select Case Err.Number
                        Case 6 'Overflow
                        'do nothing. sRepl is unchanged
                        Case Is <> 0
                            Debug.Print Err.Number, Err.Description
                            Stop 'stop to debug
                    End Select
                On Error GoTo 0
            Next M
    End If
End With

ConvertToDecimal = sRepl

End Function

【讨论】:

这是一个很好的开始。我在转换后的字符串中添加了第二遍,它将创建带符号的指数符号。 @TychoBrahe 不知道你的意思是什么,但我看到 E 在你的问题中最初显示的转换后的值是一个错字。我已经编辑了代码以删除它,并且输出与您原始问题中的 edited 示例匹配。 我的意思是您的解决方案将 E 转换为十进制表示法,但是 X 的幂运算没有发生。我修改了您的 UDF 以将 X 提高到它的指数(例如 0.012x4 变为 0.012x^4) @TychoBrahe 这很奇怪。如果取幂运算符在原始文件中,就像在您的示例中一样;它被保留在结果中。你的真实数据怎么了? 真实数据是由人从 excel 复制/粘贴创建的。 excel公式使用上标,在复制/粘贴过程中没有进行转移。添加插入符号只是清理方程式以供使用的另一个步骤。查看我的原始帖子,我包含了插入符号,但这一定是从我一直在做的翻译中获取的。

以上是关于Excel 2010 将单元格内容中的科学记数法方程转换为十进制表示的主要内容,如果未能解决你的问题,请参考以下文章

无法访问我的单元格内容中的变量

php导出excel时数字变成科学计数法,有的单元格内容是#号,最后一条数据跑到第一行的右边,怎么办?

EXCEL2010如何显示工作表中单元格内的公式

excel怎么居中单元格

excel中的一列每个单元格内容的前面统一新增同样的文字怎么做?

怎样解决Excel单元格数字显示E的情况?