ぺんたんがゲーム開発やアプリ開発、最近の気になる話題、特にスマホやIT関連について語る場所

ぺんごや

Unity Unity2D Unity初心者 Unity基礎 Unity豆知識

【Unity】数値の中から指定した桁の値を取り出す

更新日:

数値を画像として表示したい場合や他にもいくつかのケースで、この値の○桁目の値を取り出したい!ということがあると思います。
そんなときに使える手法をご紹介。

指定した桁の値を取り出す

細かい説明は後回しにして以下のコードで実現可能。
※コメントでもっと簡潔な方法を教えて頂きました。(後述)

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;
}

こちらの方がシンプルで無駄がなくていいですね。

-Unity, Unity2D, Unity初心者, Unity基礎, Unity豆知識

Copyright© ぺんごや , 2024 All Rights Reserved Powered by STINGER.