检查数值的精度和比例的有效方法是什么?

Chr*_*ham 6 c# sql-server .net-3.5

我正在编写一个例程,在将数据插入数据库之前对其进行验证,其中一个步骤是查看数值是否符合数字(x,y)SQL-Server类型的精度和比例.

我已经从SQL-Server获得了精度和规模,但是在C#中获得CLR值的精度和规模的最有效方法是什么,或者至少测试它是否适合给定的约束?

目前,我正在将CLR值转换为字符串,然后使用.IndexOf()查找小数点的位置.有更快的方法吗?

Jim*_*mmy 9

System.Data.SqlTypes.SqlDecimal.ConvertToPrecScale( new SqlDecimal (1234.56789), 8, 2)
Run Code Online (Sandbox Code Playgroud)

给出1234.67.它将截断小数位后的额外数字,并将抛出错误而不是尝试截断小数位前的数字(即ConvertToPrecScale(12344234,5,2)


Cra*_*aig 5

在不触发异常的情况下,您可以使用以下方法来确定该值是否符合精度和比例约束。

private static bool IsValid(decimal value, byte precision, byte scale)
{
    var sqlDecimal = new SqlDecimal(value);

    var actualDigitsToLeftOfDecimal = sqlDecimal.Precision - sqlDecimal.Scale;

    var allowedDigitsToLeftOfDecimal = precision - scale;

    return 
        actualDigitsToLeftOfDecimal <= allowedDigitsToLeftOfDecimal && 
        sqlDecimal.Scale <= scale;
}
Run Code Online (Sandbox Code Playgroud)