Отображение типов данных с плавающей запятой .NET в столбцы Oracle NUMER (P, S) - PullRequest
4 голосов
/ 31 января 2009

.NET-приложение, которое я пишу, должно хранить типы данных .NET float, double и decimal в базе данных Oracle. При определении типа числового столбца в Oracle необходимо указать точность и масштаб числа:

NUMBER(p,s)

p - это точность или общее количество цифр. Oracle гарантирует переносимость чисел с точностью от 1 до 38.

s - это шкала или количество цифр справа от десятичной точки. Шкала может варьироваться от -84 до 127.

Будучи ленивым программистом, которым я являюсь, и я свободно использую название «программист», я надеялся, что кто-то другой уже нашел время, чтобы выяснить хорошие NUMBER(p,s) значения по умолчанию для типов данных float, double и decimal .NET?

Ответы [ 2 ]

3 голосов
/ 31 января 2009

Если вы используете последнюю версию Oracle, вы можете вместо этого использовать BINARY_FLOAT или BINARY_DOUBLE (для .net с плавающей запятой / дублируется) Они используют одно и то же двоичное представление IEEE, поэтому при переводе в формат базы данных и из нее не происходит потери данных.

Максимальная точность десятичного числа .NET составляет 28, поэтому нет смысла определять число Oracle с более высокой точностью.

2 голосов
/ 31 января 2009

Вы НЕ ДОЛЖНЫ указывать точность и масштаб. Если вы их не включите, Oracle позволит вам указать любую точность и масштаб, который вам нравится. Если вы укажете их, то oracle не позволит вам превысить указанный масштаб и округлит избыточную точность.

Думайте о (p, s) как о проверке редактирования ваших данных. Задавая их, вы ограничиваете свои данные с точки зрения величины и точности. Внутренне они совпадают с Oracle: столбец NUMBER имеет тот же размер, что и столбец NUMBER (p, s).

Ваш выбор p и s зависит больше от ограничений вашего приложения, чем что-либо еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...