JavaScript Math
Math 是一个内置对象, 它具有数学常数和函数的属性和方法。(MDN)
Math 对象提供了一些列的数学方法和常量,如三角函数、随机数、π等。
1. 数学方法
其中用到较多的是使用 Math.random()
来产生随机数。
1.1 Math.floor
Math.floor() 返回小于或等于一个给定数字的最大整数。
var num1 = Math.floor(2.4);
var num2 = Math.floor(2.9);
console.log(num1);
console.log(num2);
因为是向下取整,不会进行四舍五入,所以不论是 2.4
还是 2.9
,经过 Math.floor
处理后,都为 2
。
1.2 Math.ceil
Math.ceil() 函数返回大于或等于一个给定数字的最小整数。
var num1 = Math.ceil(2.4);
var num2 = Math.ceil(2.9);
console.log(num1);
console.log(num2);
与 Math.floor 相反,Math.ceil 向上取整,也不会进行四舍五入,所以结果都为 3 。
许多开发者经常会弄混 Math.floor
与 Math.ceil
,其实可以根据方法名的中译来记忆,floor 可以理解成地板,ceil 可以理解成天花板,所以前者是向下取整,后者是向上取整。
1.3 Math.random
Math 下的 random 方法调用后返回一个大于等于零且小于一
的随机数,即区间 [0, 1)
。
var random = Math.random();
console.log(random);
可以尝试运行多次这段代码,random
变量的值出现一样的概率很低。
事实上 Math.random() 产生的随机数并不是真正的随机数,其返回的“随机数”是由一个确定的算法得出的,这种随机数会称之为伪随机数
。
1.3.1 随机数应用
在需要随机数的需求时,大部分情况下不会是需要一个区间为 [0, 1) 的随机数,如按学号抽奖。
假设学号的范围是 1 至 100 ,那就需要产生一个 1 至 100 之间的随机数。
这样可以换个思路,随机数还是生成 [0, 1) 范围的大小,但是将这个值放大到 [1, 100] 区间的范围。
所以就可以把随机数的结果先放大 100 倍,即 Math.random() * 100
,这时候产生的数,区间就是 [0, 100)
。
因为最小值需要的是0,而不是1,就可以将这个随机数表达式修改成 Math.random() * 100 + 1
,这时候区间就变成了 [1, 101)
。
最后只要保证右侧的区间不大于 100 即可,因为右侧区间取不到 101 ,所以可以对结果进行向下取整。
Math.floor(Math.random() * 100 + 1);
Math.floor(Math.random() * 上限 + 下限);
2. 数学常量
许多数学常量被作为属性放在 Math
对象下,如欧拉常数(E)
,圆周率(PI)
。
var e = Math.E;
var pi = Math.PI;
console.log(e);
console.log(pi);
日常开发中,大部分情况下会选择自己维护一个常量,因为可以随时的统一的修改精度。
3. 常量与方法列表
因为都是常量与方法,这里提供相应的列表供快速查阅,内容引用自 MDN 。
3.1 常量
3.2 方法
4. 小结
Math 对象包含了很多数学方法与常量,较常用的是用于产生伪随机数的 Math.random
,根据特性可以推出随机数 [下限, 上限]
的生成公式 Math.floor(Math.random() * 上限 + 下限);
。
尽量将 Math 对象下的方法过一遍,留住印象,避免造不必要的轮子。