浮動小数点と固定小数点
static void Main(string[] args) { Console.WriteLine((0.1f + 0.2f) == 0.3f); // float型。 結果:false Console.WriteLine((0.1d + 0.2d) == 0.3d); // double型。 結果:false Console.WriteLine((0.1m + 0.2m) == 0.3m); // decimal型。結果:true }
理由
浮動小数点で0.1、0.2、0.3は循環小数となる。
浮動小数点数 - Wikipedia
そのため比較結果が異なる。
decimal型は固定小数点なので、比較結果が等しい。
浮動小数点で問題となるところ
金額計算など誤差が発生してはいけない場合。
javascriptなどの固定小数点型がない言語では、
整数の下二桁を小数とみなすなどのやり方で、固定小数点を表現すること。