如何将科学数字转换为一般数字

Posted

技术标签:

【中文标题】如何将科学数字转换为一般数字【英文标题】:how to convert the scientific numbers to general 【发布时间】:2012-06-21 15:50:59 【问题描述】:

我有一个包含 18 位数字列的模板,当输入最后一个数字将转换为零时。所以我将该列修改为文本列。我需要将 xls 转换为 csv,在转换时我正在验证列,如果数字长度小于 18,我将零填充到该数字。将其转换为 csv 后,数字将被修改为科学数字。有没有可能不将数字转换为科学数字。它在文本列中保持不变。 提前致谢。

【问题讨论】:

我没有看到这种行为(XL2007,Win XP) 将xls转成csv后,用excel打开csv会显示为2.0E5等科学数字 那么当您在 Excel 中再次打开文件时出现问题,而不是在 CSV 转换期间?如果您在文本编辑器中打开 CSV 文件,它会是什么样子? 如果我们在写字板中打开它看起来是正常的数字。在我重新打开文件并删除一些行并保存后。那么数字格式将是科学格式。该列应该有前导零或 18 个数字。 您在 Excel 中应用的文本格式不会保留在 CSV 文件中,因此如果您只是在 Excel 中打开该 CSV 文件,则需要重新应用格式。但是,如果您逐步完成文本导入向导,您可以在重新打开文件时指定列格式。 【参考方案1】:

我打算将此作为评论添加到上面的评论中,但该选项对我来说没有出现,所以我将其作为答案。

在第一点上,Excel 只允许您使用 15 个有效数字,这就是您最初在末尾得到零的原因。所以是的,您必须将列格式化为文本以处理 18 位输入。不过,正如 Tim Williams 指出的那样,虽然格式决定了您保存的文件的内容(这就是您在写字板中打开文件时看到正确格式的原因),但在 Excel 中重新打开它时无济于事。

问题在于 Excel 非常热衷于“帮助”您,以至于在大多数情况下,当您打开 .csv 文件时它不会显示文本导入向导。相反,它会直接打开文件,对内容格式做出最好的猜测,在你的情况下,尽管存在前导零,但它会猜测错误。

解决此问题的一种方法是将文件另存为 .csv,但要确保它具有不同的扩展名。我使用.cma。当您保存文件时,您将其另存为“MyFile.cma”,但您必须在“文件名”对话框中将该名称用双引号引起来,否则 Excel 会将其另存为 MyFile.cma.csv

当您打开 .cma(或其他类似的无法识别的扩展名)时,Excel 将显示文本导入向导,它允许您(如 Tim 建议的那样)指定您希望在打开文件时将列设为文本。这样它就不会转换为数字,更具体地说是科学数字。

另一种选择是使用 VBA 中的 OpenText 方法重新打开文件:

    Workbooks.OpenText FileName:= _
    "C:\Users\YourName\Documents\Data\YourFile.cma", _
    Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, 
    TextQualifier:=xlDoubleQuote, _
    ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=True, _
    Space:=False, Other:=False, 
    FieldInfo:=Array(Array(1, 2)), TrailingMinusNumbers:=True

这取决于您想要或需要付出多少努力来实现自动化。

【讨论】:

只是为了澄清......在 Excel 中打开该列后将其重新格式化为文本将无效。 (这是我怀疑发生在“在 excel 中打开 csv 时,将其格式化为文本,仍然显示相同的格式”评论。)它必须在 Excel 中打开之前进行格式化,或者使用文本导入向导或 OpenText VBA 方法。

以上是关于如何将科学数字转换为一般数字的主要内容,如果未能解决你的问题,请参考以下文章

科学记数法如何批量转换成正常的文本或者数字

java代码怎么把科学计数法转换为具体数字

XSL 将科学记数法转换为数字

MongoDB以科学计数法将数字转换为字符串

java字符串转数字如何不显示科学计数法

js小数字换算科学计数法