1

C#の10進数型で精度の桁数を数える方法は?

例: 12.001 = 3 桁の精度。

エラーをスローしたいのですが、x より大きい精度が存在します。

ありがとう。

4

4 に答える 4

2

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 によるコメントを参照してください。

于 2013-09-03T20:08:20.597 に答える
0

古い質問を復活させていることはわかっていますが、これは文字列表現に依存せず、実際に末尾のゼロを無視するバージョンです。もちろん、それが望まれる場合でも。

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;
}
于 2016-10-21T12:53:10.793 に答える