.NET Decimal = что в SQL? - PullRequest
       25

.NET Decimal = что в SQL?

16 голосов
/ 23 октября 2008

Какой лучший тип данных в SQL для представления десятичного числа в .NET?

Мы хотим хранить десятичные числа с точностью до 9 десятичных разрядов и избегать ошибок округления и т. Д. Во внешнем интерфейсе.

Читая о типах данных, кажется, что использование десятичного числа в .NET - лучший вариант, потому что вы не получите ошибок округления, хотя это немного медленнее, чем Double.

Мы хотим донести это до БД и хотим, чтобы при перемещении данных через слои возникали минимальные проблемы с преобразованием. Есть предложения?

Ответы [ 3 ]

25 голосов
/ 09 марта 2010

Итак, мы провели некоторое тестирование на SQL Server. Похоже, что тип sql decimal не может полностью хранить десятичные числа .net.

SQL Server может хранить число длиной до 38 десятичных цифр . Это общее количество цифр слева и справа от десятичного знака. Вы устанавливаете «Масштаб», который сообщает серверу SQL, сколько десятичных цифр зарезервировать для числа справа от десятичного разряда. Если вы установите шкалу, то это убирает количество цифр слева от десятичной точки. (Точность - Масштаб = количество десятичных цифр слева от десятичного разряда)

.NET может представлять до 28 цифр справа от десятичной точки и 29 слева. Это потребовало бы точности 57 в SQL Server, но максимальное доступное значение - 38.

Так что, если вы хотите получить как можно большую точность и ваше число достаточно мало, вы можете сделать это:

decimal(38, 28)

Это оставило бы вас с 10 цифрами слева и 28 цифрами справа. Таким образом, любое число больше 9999999999 не может быть представлено, но вы не потеряете точность при выполнении операций с типом валюты.

С другой стороны, если ваши номера очень большие , вы можете сохранить их с этим объявлением:

decimal(38, 9)

Это позволит вам хранить наибольшее число, которое может хранить .net Decimal, которое составляет 29 цифр. Это оставило бы вас с точностью до 8 десятичных знаков.

Если ничего из этого не звучит привлекательно, вы можете просто сохранить их как varchar. Это позволит вам сохранить любые десятичные числа .net, но не позволит вам выполнять какие-либо вычисления на них в SQL.

9 голосов
/ 23 октября 2008

Я бы использовал десятичный тип в SQL Server

Взгляните на Отображения типов данных SQL Server (ADO.NET)

2 голосов
/ 23 октября 2008

Если вы используете SQL Server, эта таблица может помочь с отображениями типов данных.

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