Подтвердить что ты не робот

Что такое эквивалентный тип данных SQL Server Numeric в С#

В SQL Server мы можем записать данные AS Numeric(15,10).. что будет эквивалент этого в С#?

Я знаю, что эквивалент Numeric равен Decimal, но как представить Numeric(15,10)?

4b9b3361

Ответ 1

Нет прямого эквивалента, поскольку нет встроенных типов .NET, которые позволяют точно указать точность/масштаб, насколько мне известно. Нет типа с фиксированной точкой, например, NUMERIC.

decimal и double - это общие типы с плавающей точкой в ​​.NET, decimal реализующие десятичную плавающую точку (например, NUMERIC в T-SQL) и double реализует поведение двоичной с плавающей запятой (например, FLOAT и REAL в T-SQL). (Там float, а также меньший двоичный тип с плавающей запятой.)

Вы должны выбрать между decimal и double в зависимости от того, какие значения вы собираетесь представлять - я обычно думаю о искусственных значениях искусственных значений (особенно в деньгах) как подходящих для decimal, и непрерывные, естественные значения (такие как физические размеры) как подходящие для double.

Ответ 2

Попробуйте найти этот сайт в качестве руководства к сопоставлениям типов данных. Что касается точности и длины, вы сами контролируете это с помощью спецификаторов формата

Ответ 3

В зависимости от двух вопросов есть два ответа:

1) Что-то, что позволяет вам указать точность и масштаб. Ничего. Это похоже на ваш вопрос, но на всякий случай:

2) Что-то, что позволяет точно указать десятичное число с плавающей запятой. Это действительно десятичный тип, но точка является внутренней и устанавливается в одну из 2 ^ 32 позиций на основе входного числа. Не знаете, почему, но работает только 28 значений, или 2 ^ 5 - 4..

Таким образом, несмотря на то, что .Net позволяет Decimal выглядеть как float, он очень отличается под обложками и соответствует десятичному типу SQLServer. Все, что не является суммой различной мощности двух значений, является оценкой с использованием нормальной двоичной с плавающей запятой. Это означает, что даже что-то вроде цифры 0.1, уже потеряло точность. Но не с десятичным типом.