正在验证SQL Server中存储的十进制C#

正在验证SQL Server中存储的十进制C#,c#,sql-server,clr,decimal,C#,Sql Server,Clr,Decimal,我有一个十进制数据库列decimal(26,6) 据我所知,这意味着精度为26,刻度为6 我认为这意味着数字的长度可以是26位,其中6位可以在小数点后 在我的WPF/C#frontend中,我需要验证传入的十进制数,以便确保它可以存储在SQL Server中,而无需截断等 所以我的问题是,有没有一种方法可以检查十进制数是否具有特定的精度和刻度 另一方面,我听说SQL Server以与CLR完全不同的方式存储十进制数,这是真的吗?如果是,我需要担心吗?确定给定精度、十进制数的小数位数是否大于26的

我有一个十进制数据库列
decimal(26,6)

据我所知,这意味着精度为26,刻度为6

我认为这意味着数字的长度可以是26位,其中6位可以在小数点后

在我的WPF/C#frontend中,我需要验证传入的十进制数,以便确保它可以存储在SQL Server中,而无需截断等

所以我的问题是,有没有一种方法可以检查十进制数是否具有特定的精度和刻度


另一方面,我听说SQL Server以与CLR完全不同的方式存储十进制数,这是真的吗?如果是,我需要担心吗?

确定给定精度、十进制数的小数位数是否大于26的直接方法是检查其等效字符串的长度

    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#decimal数据类型的最大精度似乎是29位,而SQL decimal可以有38位。因此,您可能没有达到C#中SQL decimal的最大值。

如果您在编译时已经知道decimal类型的目标比例和精度,请进行简单的比较。对于十进制(13,5):

public static bool isvalidCimal13_5(十进制值)
{

返回-9999999.99999M是的,
decimal(26,6)
的意思是:总共26位,其中6位在小数点后(20位在小数点前)。您在WPF前端的数字是否真的接近小数点前20位以上?谢谢,是的,它们可能是,我们有数据确实需要这种精度。
public static bool IsValidDecimal13_5(decimal value)
{
    return -99999999.99999M <= value && value <= 99999999.99999M;
}