OleDB Jet - 阅读excel数据时的Float问题

问题描述:

当我使用OleDbDataReader将一个工作表读入一个DataTable时,浮点数字会降低其精度。OleDB Jet - 阅读excel数据时的Float问题

我试图迫使OleDb读取excel数据作为字符串,但是虽然数据现在包含在DataRow中,每个Column都定义为System.String,但它失去了精度(18.125 - > 18.124962832)。

任何想法如何避免这种行为?

+1

你可以在这里发布你的代码片段吗? – balalakshmi 2010-04-11 10:44:12

从下面的代码的输出显示了如何获得潜在数量和格式化文本与:

下面是从代码的输出:

x=18.124962832 y=18.124962832 formattedText=18.125 

下面是代码:

namespace Program 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      // Create a new workbook and get a reference to Sheet1!A1. 
      var workbook = SpreadsheetGear.Factory.GetWorkbook(); 
      var sheet1 = workbook.Worksheets[0]; 
      var a1 = workbook.Worksheets[0].Cells["A1"]; 
      // Put the number in the cell. 
      double x = 18.124962832; 
      a1.Value = x; 
      a1.NumberFormat = "0.000"; 
      double y = (double)a1.Value; 
      string formattedText = a1.Text; 
      System.Console.WriteLine("x={0} y={1} formattedText={2}", x, y, formattedText); 
     } 
    } 
} 

你可以看到现场的SpreadsheetGear样品here并下载免费试用版here

声明:我自己的SpreadsheetGear LLC

+1

然而,您的产品可能是有价值的,我真的不认为这是一个有用的答案。我自己没有答案(我只是一个偶然的Excel用户),但我确定它不需要购买第三方产品。 – 2010-04-12 19:48:22

我敢肯定,喷射尝试将数据类型分配给基于它所认为在前五行每一列。如果在前五行后面的内容不属于该数据类型,它将会将其转换或不返回任何内容。

电子表格的前五行比开始截断的项目的精度要低吗?

看看this post.

我只是测试你的数据,这method张贴在这里工作过。
即当放入DataSet时,单元值保持精度为18.124962832。

+0

是的 - IMEX = 1参数是使这项工作。几周前我只好用它。 – 2011-05-13 22:21:47