Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Потеря точности при записи в Access


Автор: mrHunter 31.7.2008, 09:54
Тип данных в Access "двойное, с плавающей точкой". VS 2005 & C#. В программе использую тип double.
При использовании следующего кода: 
Код

cmd.CommandText = "INSERT INTO [Таблица] (a11) VALUES (?)";
cmd.Parameters.Add("@a11", OleDbType.Double);
cmd.Parameters["@a11"].Value = b; // b типа double
cmd.ExecuteNonQuery();


теряется точность. Число b = 239.9359237546474, записывается в БД на одну цифру короче: 239.935923754647.

Пробовал сделать тип данных в Access "Действительное", параметр в программе OleDbType.Numeric но выскакивает ошибка: "Несоответствие типов данных в выражении условия отбора". Преобразовывал число b к типу Decimal, всё равно не помогает.

Спасибо за помощь.

Автор: ZneP 1.8.2008, 09:32
Ставишь тип данных в Access "Действительное", а запись производишь не числом 239.9359237546474, а строкой "239,9359237546474"

То есть, преобразовываешь свое число в строку, а точку заменяешь запятой (обязательно).

еще кавычки добавь в команде на добавление:
cmd.CommandText = "INSERT INTO [Таблица] (a11) VALUES ('?')";

Автор: Akina 1.8.2008, 10:39
Цитата(mrHunter @  31.7.2008,  10:54 Найти цитируемый пост)
записывается в БД на одну цифру короче

Тип данных в Access "двойное, с плавающей точкой" в соответствии с документацией - 15-циферный.

Цитата(mrHunter @  31.7.2008,  10:54 Найти цитируемый пост)
Преобразовывал число b к типу Decimal, всё равно не помогает.

Тип Decimal в Access имеет 2 вариации - либо целое в 29 цифр, либо с одной цифрой перед запятой и 28 цифрами после.

Автор: mrHunter 3.8.2008, 13:43
Цитата

Ставишь тип данных в Access "Действительное", а запись производишь не числом 239.9359237546474, а строкой "239,9359237546474"


Преобразовать это число в строку корректно тоже не получается... На удивление, тоже идет округление... Уж чего только не пробовал...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)