数値の桁数を調べる
負数、浮動小数点は扱いません。
対数(log10)
対数(log10)を取って調べる方法です。
public int Digit(int num)
{
// Mathf.Log10(0)はNegativeInfinityを返すため、別途処理する。
return (num == 0) ? 1 : ((int)Mathf.Log10(num) + 1);
}
Digit(12345); // => 5
String.Length
String型のLengthから調べる方法です。
public int Digit(int num)
{
return (num.ToString().Length);
}
Digit(12345); // => 5
10で除算した回数
10で除算した回数で調べる方法です。
public int Digit(int num)
{
int digit = 1;
for (int i = num; i >= 10; i /= 10) {
digit++
}
return digit;
}
Digit(12345); // => 5
まとめ
考え方はどの言語でも共通です。
int.ToStringメソッドは遅いので、対数(log10)か10で除算した回数から調べるのが良さそうです。
追記(2016/08/18)
- 各処理の速度をwasabi_daisukiさんが測定してくました。コメントをご覧ください。
- 一部ソースコードでshiracamusさんからアドバイスをいただきまして、一部修正しました。