ゲーム制作技術録

主にUnity/Godot4関連の技術ブログです

【Unity】【C#】割合を計算したいのに結果が0になる

前提

0~1で割合を求めたときに計算結果が0になるという問題です。

これはUnityに限った話ではないと思いますが割合を求めるとき、整数(int型)を使うと結果が0になる現象があります。

以下のコードを書いたとき、rateは0.4になるはずです。

void Test () {
    int max = 100;
    int current 40;
    float rate = current / max;
    
    Debug.Log(rate);
}

しかし出力されるのは 0 です。

実行結果

理由は、整数では小数点以下は切り捨てられるためです。

なので整数と整数の除算はもちろん整数となるはずであり、小数点以下は切り捨てられるため、求めたい0~1の割合ではなく0か1かになってしまいます。

解決

これを解決するために、intでの計算を回避します。

計算時に(float)を付けて、floatに変換します。

void Test () {
    int max = 100;
    int current 40;
    float rate = (float)current / (float)max;
    
    Debug.Log(rate);
}

実行結果

ちゃんと0~1の割合が求められているのが確認できました。