Проверка десятичного числа в C # для хранения в SQL Server - PullRequest
2 голосов
/ 06 декабря 2010

У меня есть столбец десятичной базы данных decimal (26,6).

Насколько я могу собрать, это означает точность 26 и шкалу 6.

Я думаю, это означает, что числов общей сложности может содержать до 26 цифр, и 6 из них должны быть после запятой.

В моем интерфейсе WPF / C # мне нужно проверить входящий десятичный знак, чтобы быть уверенным, что он может бытьхранится в SQL Server без усечения и т. д.

Так что мой вопрос, есть ли способ проверить, что десятичное число имеет определенную точность и масштаб.

Кроме того, я слышал, что SQL Server хранит десятичное числоСовершенно иначе, чем CLR, правда ли это, и если да, то о чем я должен беспокоиться?

Ответы [ 2 ]

4 голосов
/ 06 декабря 2010

прямой способ определить, будет ли заданная точность, масштаб десятичного числа больше, чем 26,6, для проверки длины его строкового эквивалента.

    public static bool WillItTruncate(double dNumber, int precision, int scale) {
        string[] dString = dNumber.ToString("#.#", CultureInfo.InvariantCulture).Split('.');
        return (dString[0].Length > (precision - scale) || dString.Length>1?dString[1].Length > scale:true);
    }

Максимальная точность для десятичного типа данных C #кажется, что 29 цифр, тогда как десятичный SQL может иметь 38 цифр.Таким образом, вы не можете достичь максимального значения десятичного числа SQL из C #.

1 голос
/ 27 апреля 2017

Если вы уже знаете масштаб назначения и точность десятичного типа во время компиляции, сделайте простое сравнение.Для десятичной (13,5):

public static bool IsValidDecimal13_5(decimal value)
{
    return -99999999.99999M <= value && value <= 99999999.99999M;
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...