Mathjavascript 的内置对象,但不是一个构造函数。Math 提供了数学运算中常见的常量及运算方法。

本篇文章会实现 Ramda Math 方法,及 Javascript Math 的使用。

Ramda Math

以基础逻辑为准,若作为工具库需要提高函数的健全性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
// 两数相加 a + b
function add(a: number, b: number): number {
return Number(a) + Number(b);
}
// 两数相减 a - b
function subtract(a: number, b: number): number {
return Number(a) - Number(b);
}
// 自减 n - 1
function dec(n: number): number {
return subtract(n, 1);
}
// 自增 n + 1
function inc(n: number): number {
return add(n, 1);
}
// 两数相乘
function multiply(a: number, b: number): number {
return Number(a) * Number(b);
}
// 两数相除
function divide(a: number, b: number): number {
return Number(a) / Number(b);
}
// 求和
function sum(list: number[]): number {
return list.reduce((a, b) => a + b);
}
// 求积
function product(list: number[]): number {
return list.reduce((a, b) => a * b);
}
// 平均数
function mean(list: number[]): number {
return sum(list) / list.length;
}
// 中位数
function median(list: number[]): number {
const mid = list.length / 2;
const sort = list.sort((a, b) => a - b);
return Number.isInteger(mid)
? add(sort[mid - 1], sort[mid]) / 2
: sort[Math.floor(mid)];
}
// 求模
function modulo(divide: number, mod: number): number {
return divide % mod;
}
// 数学求模
function mathMod(divide: number, mod: number): number {
if (!Number.isInteger(divide) || !Number.isInteger(mod) || mod < 1) {
throw new Error(
`${divide} and ${mod} is integer! ${mod} is greater than 1!`
);
}
return (divide % mod + mod) % mod;
}
// 取反
function negate(n: number): number {
return -n;
}

Javascript Math

Properties

Math.PI: 圆周率(π)

1
3.141592653589793

Methods

Math 方法接收数值,且会进行转换也就是 PrimitiveValue (valueOf, toString)。

Math.abs(): 取绝对值

1
2
Math.abs(1) // 1
Math.abs(-1) // 1

Math.round(): 四舍五入

1
2
3
4
5
6
Math.round(3.999) // 4
Math.round(3.001) // 3
Math.round(3.5) // 4
Math.round(-3.5) // -3
Math.floor(x + 0.5) === Math.round(x)

Math.floor(): 向下取整

1
2
3
4
5
Math.floor(3.999) // 3
Math.floor(3.001) // 3
Math.floor(-3.999) // -4
Math.floor(-3.001) // -4
Math.floor(3.000) // 3

Math.ceil(): 向上取整

1
2
3
4
5
Math.ceil(3.999) // 4
Math.ceil(3.001) // 4
Math.ceil(-3.999) // -3
Math.ceil(-3.001) // -3
Math.ceil(3.000) // 3

Math.min(): 取最小值

1
2
3
4
5
Math.min() // Infinity
Math.min(20) // 20
Math.min(20, 10) // 10
// 无参数限制
Math.min.apply(null, [20, 10]) // 10

Math.max(): 取最大值

1
2
3
4
5
Math.max() // -Infinity
Math.max(20) // 20
Math.max(20, 10) // 20
// 无参数限制
Math.max.apply(null, [20, 10]) // 20

Math.pow(): 指数运算

1
Math.pow(2, 4) // 16

Math.sqrt(x): 平方根

1
2
Math.sqrt(4) // 2
Math.sqrt(-4) // NaN

Math.random(): 随机数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 生产伪随机数 r ( 0<=r<1 )
Math.random() // 0.6937557288763474
/**
* 计算随机整数
*
* @param {number} [lower] Default: 0
* @param {number} [upper] Default: 9
* @returns {number} lower ≤ r < upper
*/
function randomInteger(lower = 0, upper = 9) {
return Math.floor(Math.random() * (upper - lower)) + lower;
}
randomInteger(1, 6) // 1|2|3|4|5

这里仅是常用的属性及方法,想要了解关于 Math 对象的信息,参考

Math library

Reference