4

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

我尝试强制 OleDb 将 excel 数据读取为字符串,但尽管数据现在包含在 DataRow 中,每个列都定义为 System.String,但它会降低精度(18.125 -> 18.124962832)。

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

4

3 回答 3

2

我刚刚测试了您的数据,并且此处发布的此方法有效。
即单元格值在放入DataSet 时保持其精度18.124962832。

于 2011-05-12T20:24:33.917 回答
0

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

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

看看这个帖子。

于 2010-06-14T18:46:35.753 回答
-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 示例并此处下载免费试用版。

免责声明:我拥有 SpreadsheetGear LLC

于 2010-04-12T14:23:47.920 回答