非天マザー by B-CHAN

iPhoneの使い方、IT、金融、経済、不動産、保険、ビジネス、音楽、映画、ニュース、自己啓発などを語ります。

JavaScriptで乱数を整数化するのに悩んだ

乱数

 

 

こんにちは、今回も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は英語で床と言う意味。

 

プログラミング言語はほとんどが英語なので、英語が得意だと多少は有利かも知れないです。意味がなんとなくわかりますから。

なので、ボクは日々、英語も少しずつ学んでいるんです。

 

www.b-chan.jp