C#の10進数型で精度の桁数を数える方法は?
例: 12.001 = 3 桁の精度。
エラーをスローしたいのですが、x より大きい精度が存在します。
ありがとう。
decimal次のような「スケール」を取得できます。
static byte GetScale(decimal d)
{
return BitConverter.GetBytes(decimal.GetBits(d)[3])[2];
}
説明:最後の値のみを取得するdecimal.GetBits4 つの値の配列を返します。intリンクされたページで説明されているように、bytethis を構成する 4 バイトのうち最後から2 番目のバイトだけが必要でありint、それを で行いBitConverter.GetBytesます。
例: 数値の位取り3.14mは です2。のスケールは3.14000mです5。のスケールは123456mです0。のスケールは123456.0mです1。
コードがビッグ エンディアン システムで実行される可能性BitConverter.GetBytes(decimal.GetBits(d)[3])[BitConverter.IsLittleEndian ? 2 : 1]がある場合は、または同様のものに変更する必要がある可能性があります。私はそれをテストしていません。以下の relative_random によるコメントを参照してください。
古い質問を復活させていることはわかっていますが、これは文字列表現に依存せず、実際に末尾のゼロを無視するバージョンです。もちろん、それが望まれる場合でも。
public static int GetMinPrecision(this decimal input)
{
if (input < 0)
input = -input;
int count = 0;
input -= decimal.Truncate(input);
while (input != 0)
{
++count;
input *= 10;
input -= decimal.Truncate(input);
}
return count;
}