この記事を三行にまとめると
C#さんが気を利かせてくれやがってしまうこっちが空気を読んであげる必要がある
株式会社みたいなもんですね
UnityというよりはC#の話なんですけど、例えば正解率を出したいみたいな時はこんな感じの割り算で算出することになると思います。
これは「10問中6問正解したので正解率は60%」みたいなイメージです。
普通に考えたらこれで「60」という答えが出るはずなんですけど、実際にやってみるとpercentの中身は0になります。
これは計算に使っている「6」「10」「100」が整数なのでC#さんが気を利かせて計算結果も整数型(int型)にしてくれやがってしまうんですね。
なのでこういう場合はC#さんが気を利かせないようにこっちが空気を読んであげる必要があるわけです。
数字の末尾に「f」をつけるとC#さんが「ああ、こいつらは見た目int型っぽいけど本当はfloat型なんだな」と察してくれます。
変数の場合は末尾に「f」をつけられないのでこんな書き方をすればOKです。
変数の前に「(float)」をつければ変数をfloat型として扱ってくれます。株式会社みたいなもんですね。前フロってやつです。
0が出力されると「あれ? 変数に上手く値が入ってないのか?」と勘違いしてしまう可能性もあるかもしれませんが、そういう時は型に注目してみてください。
それにしてもC#って結構型にうるさいわりにこういう時だけ逆に柔軟にやってくれちゃうのね。ありがたいやらありがた迷惑やら……。
float percent = 6 / 10 * 100
これは「10問中6問正解したので正解率は60%」みたいなイメージです。
普通に考えたらこれで「60」という答えが出るはずなんですけど、実際にやってみるとpercentの中身は0になります。
これは計算に使っている「6」「10」「100」が整数なのでC#さんが気を利かせて計算結果も整数型(int型)にしてくれやがってしまうんですね。
なのでこういう場合はC#さんが気を利かせないようにこっちが空気を読んであげる必要があるわけです。
float percent = 6f / 10f * 100f
数字の末尾に「f」をつけるとC#さんが「ああ、こいつらは見た目int型っぽいけど本当はfloat型なんだな」と察してくれます。
変数の場合は末尾に「f」をつけられないのでこんな書き方をすればOKです。
float percent = (float)correct / (float)count * 100f
変数の前に「(float)」をつければ変数をfloat型として扱ってくれます。株式会社みたいなもんですね。前フロってやつです。
0が出力されると「あれ? 変数に上手く値が入ってないのか?」と勘違いしてしまう可能性もあるかもしれませんが、そういう時は型に注目してみてください。
それにしてもC#って結構型にうるさいわりにこういう時だけ逆に柔軟にやってくれちゃうのね。ありがたいやらありがた迷惑やら……。