C#の10進数型で精度の桁数を数える方法は?
例: 12.001 = 3 桁の精度。
エラーをスローしたいのですが、x より大きい精度が存在します。
ありがとう。
decimal
次のような「スケール」を取得できます。
static byte GetScale(decimal d)
{
return BitConverter.GetBytes(decimal.GetBits(d)[3])[2];
}
説明:最後の値のみを取得するdecimal.GetBits
4 つの値の配列を返します。int
リンクされたページで説明されているように、byte
this を構成する 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;
}