我有一个十进制数据库列
decimal (26,6)
。
据我所知,这意味着精度为 26,小数位数为 6。
我认为这意味着该数字的长度总共可以是 26 位数字,其中小数点后可以有 6 位数字。
在我的 WPF / C# 前端中,我需要验证传入的小数,以便我可以确保它可以存储在 SQL Server 中而无需截断等。
所以我的问题是有没有一种方法可以检查小数是否具有特定的精度和小数位数。
顺便说一句,我听说 SQL Server 以与 CLR 完全不同的方式存储小数,这是真的吗?如果是的话,我需要担心吗?
确定给定十进制数
precision,scale
是否大于 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#
decimal
数据类型的最大精度似乎是 29 位数字,而 SQL 的 decimal
类型可以有 38 位数字。因此,您可能无法达到 C# 中 SQL 小数的最大值。
如果您在编译时已经知道十进制类型的目标小数位数和精度,请进行简单的比较。对于十进制(13,5):
public static bool IsValidDecimal13_5(decimal value)
{
return -99999999.99999M <= value && value <= 99999999.99999M;
}