【问题标题】:Excel Scientific Notation to string conversion in C# programmatically以编程方式在 C# 中将 Excel 科学记数法转换为字符串
【发布时间】:2018-01-16 11:30:07
【问题描述】:

我已经做了什么……

  1. 将excel文件内容读入数据表
  2. 其中一列包含科学计数法数据(例如 6.75436E+12)

        string filename = Server.MapPath("testfile.xlsx");
        string conStr = "";
        string Extension = ".xlsx";
        switch (Extension)
        {
            case ".xls": //Excel 97-03
                conStr = ConfigurationManager.ConnectionStrings["Excel03ConString"]
                         .ConnectionString;
                break;
            case ".xlsx": //Excel 07
                conStr = ConfigurationManager.ConnectionStrings["Excel07ConString"]
                          .ConnectionString;
                break;
        }
        conStr = String.Format(conStr, filename, "Yes");
        OleDbConnection connExcel = new OleDbConnection(conStr);
        OleDbCommand cmdExcel = new OleDbCommand();
        OleDbDataAdapter oda = new OleDbDataAdapter();
        DataTable dt = new DataTable();
        cmdExcel.Connection = connExcel;
    
        //Get the name of First Sheet
        connExcel.Open();
        DataTable dtExcelSchema;
        dtExcelSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
        string SheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString();
        connExcel.Close();
    
        //Read Data from First Sheet
        connExcel.Open();
        cmdExcel.CommandText = "SELECT * From [" + SheetName + "]";
        oda.SelectCommand = cmdExcel;
        oda.Fill(dt);
        connExcel.Close();
    

    如何将科学记数法转换为实际数据(例如 6754357899912)

【问题讨论】:

  • 嘿,你解决了吗?

标签: c# asp.net excel datatable


【解决方案1】:

试试这个:

double result = Double.Parse("6.75436E+12", System.Globalization.NumberStyles.Float);

*注意,当您将值悬停在 c# 中时,它看起来仍然像 sci,但它确实是双精度数。

【讨论】:

  • 感谢您的快速回复,但这并没有给我想要的价值。输出应该是 6754357899912 而不是 6754360000000.0
  • 嗯,这归结为从 excel 中读取的内容的问题。 “6.75436”仅提供 5 位小数,而不是您要求的 11 位。这实际上不是一个 c# 问题,而是一个 excel 问题。忽略这一点,尽管这是您想要做的:选择您的数据,右键单击,然后单击“格式化单元格...”并选择Number。这将阻止 excel 将您的数据呈现为 sci 并且从那里您应该在 c# 中没有任何问题
  • 我完全同意你的观点。关键是文件不能被人为篡改。
  • 是否有任何 Excel 帮助类,我们可以将整列更新为字符串???
  • 如果你不能篡改文件,那么我相信我们有一道石墙。 Excel 默认将大数表示为 sci,精度最高为小数点后 5 位。因此,这是我们在转换它们时可以达到的最精确。如果不将格式更改为Number,我绝对没有办法比这更准确。一个可能的解决方法是制作一个您无法篡改的文件的副本,将复制版本的格式更改为Number,然后像这样执行您的脚本。
猜你喜欢
  • 1970-01-01
  • 2019-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多