2


値が 0.01 以上で 1000 以下の場合は指数形式だけでなく、浮動小数点形式でも値を表示する必要があります。指数形式で表示される場合は浮動小数点形式で表示されます。

例: 3.230000000 は 3.23 と表示されます 0.00001 は 1E-05 と表示されます

しかし、与えられた番号が1の場合、私のコードの問題は、番号が1.00として表示されます。

  if (dValue >= 0.01|| dValue <= 1000.0)
        return (string.Format("{0:0.##E+00}", dValue));
     else
        return (string.Format("{0:F2}", dValue));

数値に小数値が含まれていないことを確認する方法を教えてください

4

4 に答える 4

2

数値を小数点以下 2 桁と整数に丸め、結果が「十分に近い」かどうかを確認します。

if (dValue >= 0.01 && dValue <= 1000.0)
{
    if (Math.Abs(Math.Round(dValue, 2) - Math.Round(dValue, 0)) < 0.005) {
        return string.Format("{0:F0}", dValue);
    else
        return string.Format("{0:F2}", dValue);
}
else return (string.Format("{0:0.##E+00}", dValue));

ここで注意すべきことは、(常に浮動小数点数の場合と同様に) 丸められた 2 つの結果の比較は等価比較であってはならないということです。

于 2012-08-24T07:37:21.103 に答える
1

最後の行を置き換えます

return (string.Format("{0:F2}", dValue))

return (string.Format("{0:0.##}", dValue))
于 2012-08-24T07:40:11.933 に答える
0

単純にG フォーマットを使用することを検討してください。

または、Math.Truncateを使用して整数部分を取得します。つまり、元の数値と同じかどうかを確認します (desider eps と比較するには、出力形式の精度を考慮する必要があります。この場合、おそらく 0.005 です)。

于 2012-08-24T07:36:22.743 に答える
0

時間がかかりすぎます。:)

3.234 のような値で最大 2 桁になります。

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(Format(0.00001));
        Console.WriteLine(Format(1));
        Console.WriteLine(Format(3.2));
        Console.WriteLine(Format(3.22));
        Console.WriteLine(Format(3.256));
        Console.ReadLine();
    }

    static string Format(double dValue)
    {
        if (dValue >= 0.01 && dValue <= 1000.0)
        {
            int temp = (int)Math.Round(dValue * 100);
            if (temp % 100 == 0)
                return ((int)dValue).ToString();
            else if (temp % 10 == 0)
                return (string.Format("{0:F1}", dValue));
            else
                return (string.Format("{0:F2}", dValue));
        }
        else
            return (string.Format("{0:0.##E+00}", dValue));
    }
}

与える

1E-05
1
3,2
3,22
3,26

おそらく、よりクリーンなソリューションがありますか?!

于 2012-08-24T08:02:27.757 に答える