В SQL Server мы можем записать данные AS Numeric(15,10)
.. что будет эквивалент этого в С#?
Я знаю, что эквивалент Numeric
равен Decimal
, но как представить Numeric(15,10)
?
В SQL Server мы можем записать данные AS Numeric(15,10)
.. что будет эквивалент этого в С#?
Я знаю, что эквивалент Numeric
равен Decimal
, но как представить Numeric(15,10)
?
Нет прямого эквивалента, поскольку нет встроенных типов .NET, которые позволяют точно указать точность/масштаб, насколько мне известно. Нет типа с фиксированной точкой, например, NUMERIC.
decimal
и double
- это общие типы с плавающей точкой в .NET, decimal
реализующие десятичную плавающую точку (например, NUMERIC в T-SQL) и double
реализует поведение двоичной с плавающей запятой (например, FLOAT и REAL в T-SQL). (Там float
, а также меньший двоичный тип с плавающей запятой.)
Вы должны выбрать между decimal
и double
в зависимости от того, какие значения вы собираетесь представлять - я обычно думаю о искусственных значениях искусственных значений (особенно в деньгах) как подходящих для decimal
, и непрерывные, естественные значения (такие как физические размеры) как подходящие для double
.
Попробуйте найти этот сайт в качестве руководства к сопоставлениям типов данных. Что касается точности и длины, вы сами контролируете это с помощью спецификаторов формата
В зависимости от двух вопросов есть два ответа:
1) Что-то, что позволяет вам указать точность и масштаб. Ничего. Это похоже на ваш вопрос, но на всякий случай:
2) Что-то, что позволяет точно указать десятичное число с плавающей запятой. Это действительно десятичный тип, но точка является внутренней и устанавливается в одну из 2 ^ 32 позиций на основе входного числа. Не знаете, почему, но работает только 28 значений, или 2 ^ 5 - 4..
Таким образом, несмотря на то, что .Net позволяет Decimal выглядеть как float, он очень отличается под обложками и соответствует десятичному типу SQLServer. Все, что не является суммой различной мощности двух значений, является оценкой с использованием нормальной двоичной с плавающей запятой. Это означает, что даже что-то вроде цифры 0.1, уже потеряло точность. Но не с десятичным типом.