小数点以下の桁数を取得

与えられた変数が小数点以下何桁まであるのかを知りたいときがあると思います。プログラムの書き方は何通りもありますが、サンプルとして C# での取得コードを 2 つ紹介します。

GetPrecision1() では、小数点の位置を取得し、そこから何桁あるのかを求めています。

/// <summary>
/// 小数点以下の桁数を取得
/// </summary>
private int GetPrecision1(decimal price)
{
    string priceString = price.ToString().TrimEnd('0');

    int index = priceString.IndexOf('.');
    if (index == -1)
        return 0;

    return priceString.Substring(index + 1).Length;
}

GetPrecision2() では、不要な文字を全て削除し、そこから何桁あるのかを求めています。

/// <summary>
/// 小数点以下の桁数を取得
/// </summary>
private int GetPrecision2(decimal price)
{
    return (price - (int)price).ToString()
        .TrimEnd('0')
        .Replace("0.", string.Empty)
        .Replace("-", string.Empty)
        .Length;
}

速度は、 GetPrecision1() の方が速いようです。あなたならどう書きますか?