数値を画像として表示したい場合や他にもいくつかのケースで、この値の○桁目の値を取り出したい!ということがあると思います。
そんなときに使える手法をご紹介。
指定した桁の値を取り出す
細かい説明は後回しにして以下のコードで実現可能。
※コメントでもっと簡潔な方法を教えて頂きました。(後述)
public static int GetPointDigit(int num, int digit) { int res = 0; int pow_dig = (int)Mathf.Pow(10, digit); if (digit == 1) { res = num - (num / pow_dig) * pow_dig; } else { res = (num - (num / pow_dig) * pow_dig) / (int)Mathf.Pow(10, (digit - 1)); } return res; }
引数 num の中から引数 digit で指定した桁数目(1の位から数えて)の値を取り出して返します。
スポンサードサーチ
ちょっとした説明
ほんとにちょっとした、軽い説明。
まずはじめに、Mathf.Pow(10, degi)で指定した桁数回10をべき乗したものを確保しておきます。例えば3桁目を指定したら10の3乗をする。
Math.Powは第一引数の値を、第二引数回べき乗する関数。
その後、指定した桁数が1桁目だった場合は元の数値から2桁目以降の値を引いてやります。例えば元の数値が258だったら、250を引く。
そしたら1桁目の値を取得できます。
指定した桁数が1桁目以外だった場合は、元の数値から指定した桁数目より上の桁の値を引いたあと、10を指定した桁数より1つ少ない値でべき乗したもので割ってあげます。なんかわかりにくい…。
具体例、元の値が35821で3桁目(8)が欲しい場合。
元の数値から指定した桁数目より上の値を引く…35821から35000を引く。つまり35821-35000=821。
3桁目を指定しているからそれより上の4桁目以降を引いてます。
そして10を指定した桁数より1つ少ない値でべき乗したもので割る…10の2乗、つまり100で割る。821/100で8(小数点以下は切り捨て)。
結果、欲しかった3桁目である8を取得できます。
少しでも伝わりやすくと思い具体例も出してみましたが、それでも少々分かりにくいですね…説明が難しい。
とりあえずコードをコピペすれば使えるのでそのまま使ってやってください!
【追記】もっと簡潔なコード
下記の1行でも実現できました。ご指摘ありがとうございます!
public static int GetPointDigit(int num, int digit) { return (int)(num / Mathf.Pow(10, digit - 1)) % 10; }
こちらの方がシンプルで無駄がなくていいですね。