OleDB Jet - 在读取Excel数据时浮动问题

时间:2010-04-11 10:34:16

标签: excel floating-point oledb jet

当我使用OleDbDataReader将工作表读入DataTable时,浮点数会失去其精度。

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

知道如何避免这种行为吗?

3 个答案:

答案 0 :(得分:2)

我刚测试了您的数据,此处发布的method工作正常 即,当放入DataSet时,单元格值保持精度为18.124962832。

答案 1 :(得分:0)

我很确定Jet会尝试根据它在前五行中看到的内容为每列分配数据类型。如果前五行之后的某些内容不属于该数据类型,它将转换它或者根本不返回任何内容。

电子表格的前五行的精度是否低于开始截断的项目?

查看this post.

答案 2 :(得分:-3)

以下代码的输出显示了如何使用SpreadsheetGear for .NET获取基础数字和格式化文本:

以下是代码的输出:

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