じゃがいも畑

開発ネタの記録

C# doubleをintにキャストするときはちゃんとMath.Roundする

タイトルそのままの記事です

docs.microsoft.com

問題のコード

1.01から10.0まで、それぞれに100を掛けた値を整数で出力するプログラム

        double value = 1.01;
        while (value < 10.0)
        {
            var result = value * 100;
            Console.WriteLine($"{result} --- Cast --->{(int)result}");
            value += 0.01;
        }

出力結果は101~1000になってほしいが、これを実行するとこんな感じになる

f:id:whitedog0215:20200818220143p:plain
999.9999999999832はキャストしたら1000になってほしいが小数点以下が切り捨てられて999にされている

対策

Math.Roundを使いましょう

        double value = 1.01;
        while (value < 10.0)
        {
            var result = Math.Round(value * 100);
            Console.WriteLine($"{result} --- Cast --->{(int)result}");
            value += 0.01;
        }

f:id:whitedog0215:20200818220824p:plain
これで良し
初歩的なことだけどたまに忘れるとハマるやつ