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时数字变成科学计数法,有的单元格内容是#号,最后一条数据跑到第一行的右边,怎么办?