3

負の数を取得するべきではありません。下のスクリーンショットを参照してください。

下の写真を参照してください:

ここに画像の説明を入力してください

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

    for (double i=8.0; i<=12;i=i+0.5)
        {
          double aa=  (i - Convert.ToInt32(i)) ;
          Console.WriteLine(" "+i+" "+aa);
        }
4

4 に答える 4

14

ドキュメントを確認すると:

戻り値の型: 最も近い 32 ビットの符号付き整数に丸められた
System.Int32値。
値が 2 つの整数の中間にある場合、偶数が返されます。つまり、4.5 は 4 に変換され、5.5 は 6 に変換されます。

これは、他のすべての数値が切り上げられ、次に切り捨てられ、次に切り上げられ、次に切り下げられることを意味します。つまり、半分の時間で負の数になることを意味します。

このメソッドの目的は、常に特定の方向に丸めることによって導入されたバイアスを均等にすることです。膨大な数の値を合計し、最初にそれぞれを四捨五入することを検討してください。常に切り上げると、最終的な合計は、丸められていない値を合計してから合計を四捨五入するよりも常に大きくなります。ただし、上で説明した規則に従って、半分を切り上げて半分を切り下げると、丸められた数値の最終的な合計が、四捨五入された合計に近づく可能性が高くなります。

これについては、ウィキペディア: Roundで詳細を読むこともできます。バンカーの丸めと呼ばれることもありますが、私が知る限り、銀行はこの方法を使用していません。

希望どおりに丸めていることを確認するには:

于 2013-03-12T22:30:23.047 に答える
1

あなたが何を期待するかはわかりませんが、この場合、切り捨てではなく double が丸められます

値: 最も近い 32 ビットの符号付き整数に丸められます。値が 2 つの整数の中間にある場合、偶数が返されます。つまり、4.5 は 4 に変換され、5.5 は 6 に変換されます。

Convert.ToInt32(double)のドキュメントを確認してください

于 2013-03-12T22:30:55.547 に答える
1

これを試して問題を解決してください

 for (double i = 8.0; i <= 12; i = i + 0.5)
        {
            double aa = Convert.ToInt32(i);
            Console.WriteLine(aa+" "  +i );
        }
于 2013-03-12T22:38:44.893 に答える
0
      double aa=  (i - Convert.ToInt32(i)) ;

交互に切り上げと切り下げを行っているようです。

特に驚くことではありません

于 2013-03-12T22:29:18.690 に答える