[js] Math 相关方法
(number%1==0)可用于判断是不是整数,小数%1是小数
isNaN()检测 是否是 NaN,因为 NaN!=NaN
+=
-=
*=
/=
var a = 10; a += 2;//10+2 console.log(a); //12 var a = 10; a -= 2;//10-2 console.log(a); //8 var a = 10; a *= 2;//10*2 console.log(a); //20 var a = 10; a /= 2; console.log(a); //10/2=5
Number()
奇巧淫技:+数字 相当于Number(数字 )
parseInt()
parseFloat()
1 var a = 'a'; 2 console.log(parseInt(a)); //NaN 3 console.log(!parseInt(a)); //true 4 console.log(parseFloat(a)); //NaN 5 console.log(!parseFloat(a)); //true 6 console.log(Number(a)); //NaN 7 console.log(!Number(a)); //true 8 console.log(a); //'a' 9 var a = '4a'; 10 console.log(parseInt(a)); //4 11 console.log(!parseInt(a)); //false 12 console.log(parseFloat(a)); //4 13 console.log(!parseFloat(a)); //false 14 console.log(Number(a)); //NaN 15 console.log(!Number(a)); //true 16 console.log(a); //'4a' 17 var a = 'a4'; 18 console.log(parseInt(a)); //NaN 19 console.log(!parseInt(a)); //true 20 console.log(parseFloat(a)); //NaN 21 console.log(!parseFloat(a)); //true 22 console.log(Number(a)); //NaN 23 console.log(!Number(a)); //true 24 console.log(a); //'a4' 25 var a = '飞5'; 26 console.log(parseInt(a)); //NaN 27 console.log(!parseInt(a)); //true 28 console.log(parseFloat(a)); //NaN 29 console.log(!parseFloat(a)); //true 30 console.log(Number(a)); //NaN 31 console.log(!Number(a)); //true 32 console.log(a); //'飞5' 33 var a = '5飞'; 34 console.log(parseInt(a)); //5 35 console.log(!parseInt(a)); //false 36 console.log(parseFloat(a)); //5 37 console.log(!parseFloat(a)); //false 38 console.log(Number(a)); //NaN 39 console.log(!Number(a)); //true 40 console.log(a); //'5飞' 41 var a = '4.3a'; 42 console.log(parseInt(a)); //4 43 console.log(!parseInt(a)); //false 44 console.log(parseFloat(a)); //4.3 45 console.log(parseFloat(a).toFixed(3)); //4.300 46 console.log(!parseFloat(a)); //false 47 console.log(Number(a)); //NaN 48 console.log(!Number(a)); //true 49 console.log(a); //'4.3a' 50 var a = 'a4.3'; 51 console.log(parseInt(a)); //NaN 52 console.log(!parseInt(a)); //true 53 console.log(parseFloat(a)); //NaN 54 console.log(!parseFloat(a)); //true 55 console.log(Number(a)); //NaN 56 console.log(!Number(a)); //true 57 console.log(a); //'a4.3' 58 var a = '3.4'; 59 console.log(parseInt(a)); //3 60 console.log(!parseInt(a)); //false 61 console.log(parseFloat(a)); //3.4 62 console.log(!parseFloat(a)); //false 63 console.log(Number(a)); //3.4 64 console.log(!Number(a)); //false 65 console.log(a); //'3.4' 66 var a = '34'; 67 console.log(parseInt(a)); //34 68 console.log(!parseInt(a)); //false 69 console.log(parseFloat(a)); //34 70 console.log(!parseFloat(a)); //false 71 console.log(Number(a)); //34 72 console.log(!Number(a)); //false 73 console.log(a); //'34'
#parseInt()可用于进制转换,将各种进制的数,转换为10进制
//都返回15 parseInt("F", 16); parseInt("17", 8); parseInt("15", 10); parseInt(15.99, 10); parseInt("FXX123", 16); parseInt("1111", 2); parseInt("15*3", 10); parseInt("12", 13);
Math.abs(x)
//函数返回指定数字 “x“ 的绝对值。
Math.abs('-1'); // 1 Math.abs(-2); // 2 Math.abs(null); // 0 Math.abs("string"); // NaN Math.abs(); // NaN
Math.ceil(x)
//返回一个大于或等于数 "x" 的最小整数(向上取整)。
Math.ceil(.95); // 1 Math.ceil(4); // 4 Math.ceil(7.004) // 8
Math.floor(x)
~~number 可同样实现 Math.floor()的效果
//函数返回小于或等于数 "x" 的最大整数(向下取整)。
Math.floor( 45.95); // 45 Math.floor(-45.95); // -46
Math.min()
Math.min([value1[,value2, ...]])
//返回零个或更多个数值的最小值。
var x = 10, y = -20; var z = Math.min(x, y); console.log(z); //-20 //限定边界 var f = function(foo) { return foo; } var boundary = 20; var x = Math.min(f(25), boundary); console.log(x); //20 //快速获取数组最小值 function getMinOfArray(numArray) { return Math.min.apply(null, numArray); } console.log(getMinOfArray([-1, 2, 3, 5, 10]));//-1
Math.max()
Math.max([value1[,value2, ...]])
//函数返回 0 或 更多数的最大值。
Math.max(10, 20); // 20 Math.max(-10, -20); // -10 Math.max(-10, 20); // 20 //快速获取数组最大值 function getMaxOfArray(numArray) { return Math.max.apply(null, numArray); } console.log(getMaxOfArray([-1, 2, 3, 5, 10])); //10
Math.random()
//函数返回 [0-1) 的浮点值伪随机数(大于等于0,小于1)。
// 返回一个大于等于0,小于1的伪随机数 function getRandom() { return Math.random(); } // 0 <= x <1 // 返回一个介于min和max之间的随机数 function getRandomArbitrary(min, max) { return Math.random() * (max - min) + min; } // min < x <max // 返回一个介于min和max之间的整型随机数 // Using Math.round() will give you a non-uniform distribution! function getRandomInt1(min, max) { return Math.floor(Math.random() * (max - min + 1) + min); } // min <= x <= max
//返回随机颜色
function randomColor() { return `#${(~~(Math.random() * (1 << 24))).toString(16)}` }
Math.round()
//返回一个数值四舍五入后最接近的整数
// Returns the value 20 x = Math.round(20.49); // Returns the value 21 x = Math.round(20.5); // Returns the value -20 x = Math.round(-20.5); // Returns the value -21 x = Math.round(-20.51); // Returns the value 1 (!) // Note the rounding error because of inaccurate floating point arithmetics //最好不要在round方法内写运算? x = Math.round(1.005 * 100) / 100; console.log(Math.round(100.5)); //101 console.log(Math.round(1.005 * 100)); //100
Math.sqrt()
//函数返回一个数的平方根
Math.sqrt(9); // 3 Math.sqrt(2); // 1.414213562373095 Math.sqrt(1); // 1 Math.sqrt(0); // 0 Math.sqrt(-1); // NaN
Math.SQRT2
表示 2 的平方根,约为 1.414
Math.pow()
Math.pow(base, exponent)
Math.pow() 函数返回基数(base)的指数(exponent)次幂,即 base exponent。
function raisePower(x,y) { return Math.pow(x,y) }
Math.log()
Math.log(x)
Math.log() 函数返回一个数的自然对数,即:
∀x>0,Math.log(x)=ln(x)=the unique y such that ey=x
也就是 e的y次方 = x
自然常数e(约为2.71828)
Math.log(-1); // NaN, out of range Math.log(0); // -Infinity Math.log(1); // 0 Math.log(10); // 2.302585092994046
#getBaseLog(10, 1000),返回2.9999999999999996
也就是求 10的多少次方为1000
function getBaseLog(x, y) { return Math.log(y) / Math.log(x); }
#求数字的底数和指数
var isPP = function(n) { for (var m = 2; m <= Math.floor(Math.sqrt(n)); ++m) { var k = Math.round(Math.log(n) / Math.log(m)) if (Math.pow(m, k) == n) return [m, k]; } return null; }
#Math.exp()
返回 ex,x 表示参数,e 是欧拉常数(Euler's constant),自然对数的底数。
Math.exp(x)
```
Math.exp(-1); // 0.36787944117144233
Math.exp(0); // 1
Math.exp(1); // 2.718281828459045
```
#Math.sin
返回一个数值的正弦值。
Math.sin(x)
```
Math.sin(0); // 0
Math.sin(1); // 0.8414709848078965
Math.sin(Math.PI / 2); // 1
```
Number.prototype.toFixed()
numObj.toFixed(digits)
//使用定点表示法来格式化一个数。
//返回的值为指定的小数位数,会进行四舍五入
返回的结果是字符串。
var numObj = 12345.6789; numObj.toFixed(); // 返回 "12346":进行四舍五入,不包括小数部分 numObj.toFixed(1); // 返回 "12345.7":进行四舍五入 numObj.toFixed(6); // 返回 "12345.678900":用0填充 (1.23e+20).toFixed(2); // 返回 "123000000000000000000.00" (1.23e-10).toFixed(2); // 返回 "0.00" 2.34.toFixed(1); // 返回 "2.3" - 2.34.toFixed(1); // 返回 -2.3 (由于操作符优先级,负数不会返回字符串) (-2.34).toFixed(1); // 返回 "-2.3" (若用括号提高优先级,则返回字符串)
Number.prototype.toPrecision()
numObj.toPrecision(precision)
指定的精度返回该数值对象的字符串表示。
var numObj = 5.123456; console.log("numObj.toPrecision() is " + numObj.toPrecision()); //输出 5.123456 console.log("numObj.toPrecision(5) is " + numObj.toPrecision(5)); //输出 5.1235 console.log("numObj.toPrecision(2) is " + numObj.toPrecision(2)); //输出 5.1 console.log("numObj.toPrecision(1) is " + numObj.toPrecision(1)); //输出 5 // 在某些情况下会以指数表示法返回 console.log((1234.5).toPrecision(2)); // "1.2e+3"
isFinite()
isFinite(Infinity); // false isFinite(NaN); // false isFinite(-Infinity); // false isFinite(0); // true isFinite(2e64); // true isFinite(null); // true isFinite("0"); // true, would've been false with the // more robust Number.isFinite("0") isFinite(0/0) ; // false isFinite("foo"); // false isFinite("10"); // true isFinite(10); // true isFinite(undefined); // false isFinite(); // false isFinite(null); // true,这点当特别注意
#输出指定位数的随机数
function randomNumber(n) { var rnd = ""; for (var i = 0; i < n; i++) rnd += Math.floor(Math.random() * 10); return rnd; } console.log(randomNumber(4));