Какой тип данных в SQL лучше всего подходит для представления Decimal в .NET?
Мы хотим хранить десятичные числа с точностью до 9 знаков после запятой и хотим избежать ошибок округления и т. д. Во внешнем интерфейсе.
Читая о типах данных, кажется, что использование Decimal в .NET - лучший вариант, потому что вы не получите ошибок округления, хотя это немного медленнее, чем Double.
Мы хотим донести это до БД и хотим минимизировать проблемы с преобразованием при перемещении данных по уровням. Какие-либо предложения?





Я бы использовал десятичный тип в SQL Server
Взгляните на Сопоставления типов данных SQL Server (ADO.NET)
Если вы используете SQL Server, этот стол может помочь с сопоставлением типов данных.
Итак, мы провели небольшое тестирование 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.