JavaScript Math
Math 是内置对象, 它具有数学常数和的和。(MDN)
Math 对象提供了一些列的数学和常量,如三角、数、π等。
数学其实就是常用的数学中的,如三角。
其中用到较多的是使用 Math.random()
来产生数。
以下列举部分常用的。
Math.floor() 返回小于或等于给定数字的最大整数。
Math.floor就是对数进行向下取整。
var num1 = Math.floor();
var num2 = Math.floor();
console.log(num1); // :2
console.log(num2); // :2
因为是向下取整,不会进行四舍五入,所以不论是 2.4
还是 2.9
,经过 Math.floor
处理后,都为 2
。
Math.ceil() 返回大于或等于给定数字的最小整数。
Math.ceil 就是对数进行向上取整。
var num1 = Math.ceil();
var num2 = Math.ceil();
console.log(num1); // :3
console.log(num2); // :3
与 Math.floor 相反,Math.ceil 向上取整,也不会进行四舍五入,所以结果都为 3 。
许多开发者经常会弄混 Math.floor
与 Math.ceil
,其实可以根据名的中译来记忆,floor 可以理解成地板,ceil 可以理解成天花板,所以前者是向下取整,后者是向上取整。
Math 下的 random 后返回大于等于零且小于一
的数,即区间 [0, 1)
。
var random = Math.random();
console.log(random);
可以尝试运行多次这段,random
变量的值出现一样的概率很低。
事实上 Math.random() 产生的数并不是真正的数,其返回的“数”是由确定的算法得出的,这种数会称之为伪数
。
在需要数的需求时,大部分情况下不会是需要区间为 [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() * + );
由此就可以推出较为通用的数公式:
// 数区间:[下限, 上限]
Math.floor(Math.random() * 上限 + 下限);
许多数学常量被作为放在 Math
对象下,如欧拉常数(E)
,圆周率(PI)
。
var e = Math.E;
var pi = Math.PI;
console.log(e); // :2.718281828459045
console.log(pi); // :3.141592653589793
日常开发中,大部分情况下会选择自己维护常量,因为可以随时的统一的精度。
因为都是常量与,这里提供相应的列表供查阅,引用自 MDN 。
Math 对象包含了很多数学与常量,较常用的是用于产生伪数的 Math.random
,根据特性可以推出数 [下限, 上限]
的公式 Math.floor(Math.random() * 上限 + 下限);
。
尽量将 Math 对象下的过一遍,留住印象,避免造不必要的轮子。