C# doubleをintにキャストするときはちゃんとMath.Roundする
タイトルそのままの記事です
問題のコード
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になってほしいが、これを実行するとこんな感じになる
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; }
これで良し
初歩的なことだけどたまに忘れるとハマるやつ