整数値の任意の位の数字を取り出す
今日は数学チックな話題です。
適当な数の、任意の位の数字1個を取り出す方法を紹介します。
まずは例から
いきなりコードを書くのではなく、まずは実際の数を見ながらある位の数を取り出す過程を追って見ます。
適当に、76251という5桁の数の百の位、つまり、右から3番目の"2"を取り出したいと思います。
まず、100より0が一つ多い、1000で割ったあまりを求めます。
76251÷1000=76 あまり 251
76251=76×1000 + 251
76251≡251 (mod 1000)
3つのうちどの式で解釈してもらってもいいですが、251というあまりが出てきます。
これを100で割ってみると…
251÷100=2.51 (小数点以下を切り捨てると2)
ハイ、取り出せました。こんな感じの処理を、VRMスクリプトに実装していきます。
サンプルコード
//ダミー変数の定義
Var num
set num 76251
//変数numの百の位を取り出す
Var hundred
mov hundred num //変数numの中身をhundredの中身にコピー
mod hundred 1000 //1000で割ったあまり
div hundred 100 //100で割る
DrawVar num
DrawVar hundred
もとの数numから100の位の数を取り出しても、numの中身が狂わないように、変数hundredにコピーしてから取り出しだす作業をしています。mod命令についてはこちら。
整数同士の割り算(div)については、割り切れなかった場合には小数点以下は切り捨てとなる仕様のようですので、これで百の位の数が取り出せます。
他の位の数を取り出したいときは、イタリックにしたmodとdivの2つ目のパラメータの0を1個ずつ増やしたり減らしたりすればOKです。
一の位を取り出したいときは、
mod hundred 10
だけで出てきますね。(一の位で'hundred'はおかしいですけども・笑)
GetCurrentSpeed命令で取得した速度の値を操作したりとか、10進数の値を(0,)1~9のフラグの並びとみなして好きに取り出すとか…、適当な使い道があるかと思います。
次回、応用編に続きます。
| 固定リンク
「VRM:研究」カテゴリの記事
- VRMNXの時間系イベントが使いにくいなあと思っているアナタへ(2019.12.24)
- [VRMNX] フレーム同期の話(2019.07.18)
- [Python] リスト型をベクトルに見立てて計算したい(2019.06.16)
- VRMNXのレイヤーベース地形を使ってみよう(前編)(2019.05.18)
- [VRMNX]自動踏切モジュール(2019.01.25)
この記事へのコメントは終了しました。


コメント