乱数
こんにちは、今回もJavaScript学習記事を書いてみます。
マイクロソフトのExcelを使う場合、四捨五入や切り捨て、切り上げは、
- round
- rounddown
- roundup
を使います。
例えば、A5セルに、何らかの数値が入っていて、それを切り捨てて整数にする場合、
=rounddown(A5)
なんて書きますよね。
JavaScript学習中のボクは、今回、この切り捨て整数化に悩みました。
乱数を整数化したかったのです。
四捨五入、切り捨て、切り上げ
JavaScriptにあらかじめ用意されているメソッドとして、乱数を発生させる、
Math.random()
があります。これは0から1未満の乱数を発生させます。
3倍すれば、3未満の乱数が発生することになります。
例えば、
var a = Math.random();
なら、aには、0.543532やら0.9843343などが入りますし、
var a = Math.random()*3;
なら、aには、0.36284やら1.853やら2.89323などが入ります。
では、0もしくは1もしくは2のいずれかの整数をランダムで発生させたい場合は?
Excelと同じように、整数化する機能があります。
Math.round()…四捨五入
Math.ceil()…切り上げ
Math.floor() …切り捨て
です。
ボクはこれらも、Math.random()と同じようなメソッドとして考えました。
なので、3未満の整数を得たい場合、次のように書きました。
var a = Math.random()*3.floor();
すると、コンソール画面には、ドヤ顔でエラー表示が。
オブジェクトにドットを付けてメソッド。
これがJavaScriptの文法のはず。
なので、Mathにrandomを付けて乱数を作り、さらにfloorで切り捨てる。
なぜダメなんだろう?
調べていく中で、メソッドをいくつもつなげて書く方法をメソッドチェーンと呼ぶことも知りましたよ。
でも、このメソッドチェーンだとエラー。
仕方が無いので、
var a = Math.random()*3;
var b = a.Math.floor();
これもエラー。
var a = Math.random()*3;
var b = a.floor();
やはりエラー。
で、さらに学んで、やっと正解が。
var a = Math.floor(Math.random()*3);
そうです。floorの引数に乱数を入れるだけでした。変数bなんて不要でした。
randomの方は引数では無く、全体を数倍するのに対し、floorの方は計算対象を引数に。
いや、マニュアルを読めば、すぐにわかりそうなモノですが。
ちなみに、
ceilは英語で天井と言う意味。
floorは英語で床と言う意味。
プログラミング言語はほとんどが英語なので、英語が得意だと多少は有利かも知れないです。意味がなんとなくわかりますから。
なので、ボクは日々、英語も少しずつ学んでいるんです。