2

コードは次のとおりです。

    static void Main(string[] args)
    { 
        int xd2 = 5;

        for (double xd = (double)xd2; xd <= 6; xd += 0.01)
        {
            Console.WriteLine(xd);
        }

    }

出力は次のとおりです。 ここに画像の説明を入力

0.01 を追加し続けたいです (画面でわかるように、たまたま 0.99999 を追加することもあります) ありがとう

4

4 に答える 4

14

decimalこの程度の精度を保ちたい場合に使用します。

浮動小数点型は、特定の値を正確に表すことができません。包括的な説明については、すべてのコンピューター科学者が浮動小数点演算について知っておくべきことを読むことをお勧めします。

decimal xd2 = 5m;

for (decimal xd = xd2; xd <= 6m; xd += 0.01m)
{
    Console.WriteLine(xd);
}
于 2012-05-21T21:47:14.440 に答える
5

いいえ。

 int xd2 = 5;

 for (decimal xd = (decimal)xd2; xd <= 6; xd += 0.01M)
 {
     Console.WriteLine(xd);
 }

double に固執したいが、小数点以下 2 桁までしか気にしない場合は...

int xd2 = 5;

for (double xd = (double)xd2; xd <= 6; xd += 0.01)
{
   Console.WriteLine(Math.Round(xd,2));
}
于 2012-05-21T21:49:15.543 に答える
2

これは、 double が浮動小数点であり、この演算が正確ではないためです。次のように、代わりに小数を使用できます。

 static void Main(string[] args)
    {
        int xd2 = 5;

        for (decimal xd = (decimal)xd2; xd <= 6; xd += 0.01M)
        {
            Console.WriteLine(xd);
        }
        Console.ReadLine();
    }

この記事も参照してください: .NET での倍精度の問題

于 2012-05-21T21:55:11.263 に答える
1

可能であれば、これらの種類の丸め誤差を取り除くために、反復計算ではなく常に絶対計算を使用する必要があります。

public static void Main(string[] args)
{
    int xd2 = 5;

    for (int i = 0; i < 100; ++i) {
        Console.WriteLine(xd2 + i * 0.01);
    }
}
于 2012-05-21T21:52:48.403 に答える