2010-12-06 2 views
2

私は10進数のデータベース列decimal (26,6)を持っています。私の知る限りでは、これが26の精度と私はこの数は長さが26桁の合計とすることができ、これらの数字の6を後にすることができることを意味すると思う6SQL Serverの格納用にC#で10進数を検証する

のスケールを意味収集できるよう

小数点以下桁数私のWPF/C#のフロントエンドで

は、私はそれが切り捨てずにSQL Serverに保存することができますことを確認することができますように、着信小数を検証する必要があるなど

だから私の質問は、その小数をチェックする方法があります特定の精度とスケールを持っています。

また、SQL Serverが10進数をCLRとまったく異なる方法で格納していると聞いたことがありますが、これは本当ですか、もしそうなら、私は心配する必要がありますか?

+0

「小数点(26,6)」とは、小数点以下6桁目(20桁目)の合計26桁を意味します。あなたのWPFフロントエンドの数字は本当に**小数点の前に20桁以上に近づいていますか? –

+0

ありがとうございます、そうかもしれませんが、この精度が必要なデータがあります。 – bplus

答えて

4

10進数の桁数が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小数は38桁である可能性があります。したがって、C#からSQLの小数点以下の最大値を打つことはできません。

1

コンパイル時にdecimal型のデスティネーションのスケールと精度がわかっている場合は、単純な比較を行います。小数点(13,5)の場合:

public static bool IsValidDecimal13_5(decimal value) 
{ 
    return -99999999.99999M <= value && value <= 99999999.99999M; 
} 
関連する問題