OleDB Jet - Float проблемы при чтении данных Excel - PullRequest
4 голосов
/ 11 апреля 2010

Когда я считываю лист в DataTable, используя OleDbDataReader, числа с плавающей запятой теряют свою точность.

Я пытался заставить OleDb прочитать данные Excel в виде строки, но хотя данные теперь содержатся в DataRow, где каждый столбец определен как System.String, он теряет точность (18.125 -> 18.124962832).

Есть идеи, как избежать такого поведения?

Ответы [ 3 ]

2 голосов
/ 13 мая 2011

Я только что проверил ваши данные, и этот метод , опубликованный здесь, сработал.
то есть значение ячейки сохранило свою точность 18.124962832, когда помещено в DataSet.

0 голосов
/ 14 июня 2010

Я почти уверен, что Jet пытается присвоить тип данных каждому столбцу на основе того, что он видит в первых пяти строках. Если что-то после этих первых пяти строк не попадает в этот тип данных, оно либо конвертирует его, либо вообще ничего не возвращает.

Имеют ли первые пять строк вашей таблицы меньшую точность, чем усекаемые элементы?

Взгляните на это сообщение.

0 голосов
/ 12 апреля 2010

Вывод кода, приведенного ниже, показывает, как получить базовый номер и форматированный текст с помощью 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

...