Math数学函数

Math数学函数

Math是数学常数属性和数学函数方法,Math不是一个函数对象,它只用于Number类型,不支持BigInt

与其它全局对象不同的是,Math 不是一个构造器。Math 的所有属性与方法都是静态的。Math 的常量是使用 JavaScript 中的全精度浮点数来定义的。

属性

Math.PI			// 圆周率,一个圆的周长和直径之比,约等于 3.14159
Math.E			// 欧拉常数,也是自然对数的底数,约等于 2.718
Math.LN2		// 2 的自然对数,约等于 0.693
Math.LN10		// 10 的自然对数,约等于 2.303
Math.LOG2E		// 2 为底的 E 的对数,约等于 1.443
Math.LOG10E		// 10 为底的 E 的对数,约等于 0.434
Math.SQRT2		// 2 的平方根,约等于 1.414
Math.SQRT1_2	// 二分之一的平方根,约等于 0.707

方法

常用方法

Math.max(x1,x2,...n)	// 最大值  取数组中最大元素 Math.max(...[1,2,3])或Math.max.apply(null, [1,2,3])
Math.min(x1,x2,...n)	// 最小值
Math.random()	// 0~1之间的伪随机数
Math.round(x)	// 四舍五入后的整数
Math.floor(x)	// 向下取整 返回小于或等于一个数
Math.ceil(x)	// 向上取整	返回大于一个数的最小整数
Math.trunc(x)	// 保留整数部分,去掉小数部分
Math.abs(x)		// 绝对值

三角函数方法

sin()、cos()、tan()、asin()、acos()、atan()
Math.asin(x)	// 反正弦值
Math.acos(x)	// 反余弦值
Math.acosh(x)	// 反双曲余弦值

其他方法

Math.imul(x, y)		// 32位整数乘法的结果
Math.sign(x)		// 返回一个数的符号,得知一个数是正数、负数还是0  负数返回-1  正数返回1  零返回0
Math.pow(x, y)		// x的y次幂
Math.sqrt(x)		// x的平方根
Math.cbrt(x)		// x的立方根
Math.fround(x)		// 返回最接近一个数的单精度浮点型表示。
Math.clz32(x)		// 返回一个 32 位整数的前导零的数量。

案例

随机数生成算法

随机生成字符串

const str = Math.random().toString(36).substr(2) // 随机生成字符串

先是 Math.random() 生成 [0, 1) 的数,也就是 0.123312、0.982931之类的,然后调用 numbertoString 方法将其转换成 36 进制的,按照 MDN 的说法,36 进制的转换应该是包含了字母 a~z 和 数字 0~9 的,因为这样生成的是 0.89kjna21sa 类似这样的,所以要截取一下小数部分,即从索引 2 开始截取 10 个字符就是我们想要的随机字符串了。

// 得到两个数之间的随机数
function getRandom(min, max) {
  return Math.random() * (max - min) + min;
}
// 得到两个数之间的随机整数
function getRandom(min, max) {
  min = Math.ceil(min);
  max = Math.floor(max);
  return Math.floor(Math.random() * (max - min)) + min; //不含最大值,含最小值
  // return Math.floor(Math.random() * (max - min + 1)) + min; //含最大值,含最小值 
}

Math.random() 不能提供像密码一样安全的随机数字。不要使用它们来处理有关安全的事情。使用Web Crypto API 来代替,采用更精确的window.crypto.getRandomValues() 方法

高精度比较

二进制数字32位和64位表示 会存在精度不一致,在某些精度不高的场合下,可以通过将二个浮点数转换成32位浮点数进行比较,以解决64位浮点数比较结果不正确的问题:

0.1 + 0.2 == 0.3;    //false
function equal(v1, v2) {
    return Math.fround(v1) == Math.fround(v2);
}
equal(0.1 + 0.2, 0.3);   //true
原文地址:https://www.cnblogs.com/hllive/p/15776049.html