mdr141
11/4/2018 - 11:31 AM

CSharp除算

・除算はオペランドの型に注意する
int / int = int
double / int = double
int / double = double


・浮動小数点型の演算に注意する
浮動小数点の見た目は10進数だけど、内部では2進数なので誤差が生じる。
ので、doubleではなくdecimalにすることで精確になる。
しかし、
・扱える値の範囲が狭くなる
・処理が低速
というデメリットがある。

ので結局、演算はintで行い、最後につじつま合わせ(10で除算したり)して誤差を防ぐのが良い?
using System;

namespace ConsoleTest
{
    class Program
    {
        static void Main(string[] args)
        {
            // int / int = int
            Console.WriteLine(3 / 4);  // OUTPUT: 0
            // double / int = double
            Console.WriteLine(3d / 4); // OUTPUT; 0.75

            Console.WriteLine(0.2 * 3);        // OUTPUT: 0.6
            Console.WriteLine(0.2 * 3 == 0.6); // OUTPUT: False

            Console.WriteLine((2 * 3) / 10d == 0.6); // True
        }
    }
}