Math 对象是提供执行数学运算的方法和属性的对象。不要创建 Math 对象的新实例,而是使用 Math 对象提供的静态方法。这里我们将解释如何使用 Math 对象。
目录
22-1 Math 对象的静态属性
22-2 获取绝对值 (Math.abs)
22-3 四舍五入/向上舍入/向下舍入(Math.round, Math.ceil, Math.floor)
22-4 删除小数位并得到一个整数(Math.trunc)
22-5 获取多个值中的最大值和最小值(Math.max,Math.min).
22-6 生成一个随机数 (Math.random)
22-7 计算平方根/立方根(Math.sqrt、Math.cbrt)
22-8 计算能力(Math.pow、Math.exp)
讲解 Math 对象提供的静态属性列表和每个属性的说明。
Math 对象的静态属性列表
Math 对象提供的静态属性包括:
静态属性 | 意义 | 值 |
Math.E | 自然对数的底 | 2.718281828459045 |
Math.LN2 | 2的自然对数 | 0.6931471805599453 |
Math.LN10 | 10的自然对数 | 2.302585092994046 |
Math.LOG2E | e 的以 2 为底的对数 | 1.4426950408889634 |
Math.LOG10E | e 的以 10 为底的对数 | 0.4342944819032518 |
Math.PI | π | 3.141592653589793 |
Math.SQRT1_2 | 1/2 的平方根 | 0.7071067811865476 |
Math.SQRT2 | 2 的平方根 | 1.4142135623730951 |
关于对数
对数在这里就不多说了,简单来说,当x = a p时,p 称为x 以a 为底的对数。
所以Math对象的静态属性中定义的常量可以表示为:
Math.LN10 log e 10
Math.LN2 log e 2
Math.LOG10E log 10 e
Math.LOG2E log 2 e
关于圆周率
Pi,π,在计算圆的周长和面积时使用。
let r = 10; // 半径
let c = 2 * Math.PI * r; // 周长 2πr
let a = Math.PI * r * r; // 圆面积 πr 2
关于平方根
平方根在这里就不多说了,简单来说,当a = b 2成立时,b称为a的平方根。2 的平方根是平方等于 2 的数。
Math 对象提供的静态属性列表以及每个属性的说明。
Math 对象的静态方法 Math.abs 获取目标值的绝对值。本节介绍如何使用 Math 对象的 Math.abs 方法。
获取绝对值(abs)
Math 对象的 Math.abs 方法获取目标值的绝对值。格式如下。
Math.abs(数字)
返回参数中指定数字的绝对值。如果参数不是数字,则将其转换为数字并获取绝对值。数字 x 的绝对值通常表示为 |x|。绝对值计算原样返回正值,负值乘以-1,正负号颠倒。
看看下面的示例。
Math.abs(12);
>> 12
Math.abs(0);
>> 0
Math.abs(-12);
>> 12
如果指定一个非数值作为参数,则转换为数值后得到绝对值。
看看下面的示例。
Math.abs('-64');
>> 64
Math.abs([-512]);
>> 512
Math.abs(null);
>> 12
Math.abs(undefined);
>> NaN
Math.abs(NaN);
>> NaN
我们已经了解了如何使用 Math 对象的 Math.abs 方法。
Math 对象的静态方法 Math.round 将目标值四舍五入为最接近的整数。Math.ceil 将目标值四舍五入为最接近的整数。Math.floor 将目标值截断到最接近的小数位。本节介绍如何使用 Math 对象的 Math.round、Math.ceil 和 Math.floor 方法。
小数点四舍五入(四舍五入)
Math 对象的 Math.round 方法返回四舍五入到最接近整数的目标值。格式如下。
Math.round(数値)
返回通过舍入参数中指定的数字的小数点获得的值。如果参数不是数字,则将其转换为数字,然后将值四舍五入为最接近的整数。
如果目标值为正且小数部分大于 0.5,则通过 Math.round 方法进行舍入会向上舍入一位较大的整数,如果小数部分小于 0.5,则会向下舍入为一位较低的整数。如果小数部分是 0.5,它将向正无穷大方向四舍五入。
另外,如果目标值为负且小数部分大于-0.5(例如-0.4),则向上取整到下一个更大的整数,如果小数部分小于-0.5(例如-0.6),它将被四舍五入。四舍五入为整数。如果小数部分为 -0.5,则向正无穷四舍五入。
看看下面的示例。如果目标值为正。
Math.round(3.4);
>> 3
Math.round(3.5);
>> 4
Math.round(3.6);
>> 4
3.4 向下舍入为 3,3.6 向上舍入为 4。3.5 向正无穷大四舍五入得到 4。
如果目标值为负:
Math.round(-3.6);
>> -4
Math.round(-3.5);
>> -3
Math.round(-3.4);
>> -3
-3.6 向上舍入为 -4,-3.4 向下舍入为 -3。-3.5 向正无穷大方向四舍五入为 -3。
如果小数点是0.5,比如3.5或者-3.5,就会往正无穷方向四舍五入,如下图所示。请特别注意,像 -3.5 这样的负值是 -3 而不是 -4。
如果您在参数中指定一个非数字的值,它将被转换为一个数字并且小数点后的值将被四舍五入。看看下面的示例。
Math.round('12.75');
>> 13
Math.round([-4.445]);
>> -4
Math.round(null);
>> 0
Math.round(undefined);
>> NaN
Math.round(NaN);
>> NaN
小数点后四舍五入 (ceil)
Math 对象的 Math.ceil 方法获取向上舍入的目标值。格式如下。
Math.ceil(数值)
返回通过将参数中指定的数字的小数点四舍五入而获得的值。如果参数不是数字,则将其转换为数字,然后四舍五入得到小数点后的值。
使用 Math.ceil 方法四舍五入是指向上舍入到大于或等于目标值的最小整数。3.2和3.8都变成4,-3.2和-3.8都变成-3。
看看下面的示例。如果目标值为正。
Math.ceil(3.2);
>> 4
Math.ceil(3.8);
>> 4
Math.ceil(3);
>> 3
3.2 和 3.8 都四舍五入到 4。整数值(例如 3)不会更改。
如果目标值为负:
Math.ceil(-3.2);
>> -3
Math.ceil(-3.8);
>> -3
Math.ceil(-3);
>> -3
-3.2 和 -3.8 都向上舍入为 3。-3 等整数值保持不变。
如果将非数值指定为参数,则将其转换为数值,并将小数点后的值四舍五入。看看下面的示例。
Math.ceil('12.75');
>> 13
Math.ceil([-4.445]);
>> -4
Math.ceil(null);
>> 0
Math.ceil(undefined);
>> NaN
Math.ceil(NaN);
>> NaN
向下舍入(floor)
Math 对象的 Math.floor 方法获取向下舍入到最接近的小数点的目标值。格式如下。
Math.floor(数值)
返回通过截断参数中指定的数字的小数点获得的值。如果参数不是数字,则将其转换为数字,取小数点后的值。
Math.floor 方法截断为小于或等于目标值的最大整数。3.2和3.8都变成3,-3.2和-3.8都变成-4。
看看下面的示例。如果目标值为正。
Math.floor(3.2);
>> 3
Math.floor(3.8);
>> 3
Math.floor(3);
>> 3
3.2 和 3.8 都向下舍入为 3。整数值(例如 3)不会更改。
如果目标值为负:
Math.floor(-3.2);
>> -4
Math.floor(-3.8);
>> -4
Math.floor(-3);
>> -3
-3.2 和 -3.8 都向上舍入为 3。-3 等整数值保持不变。
如果将非数值指定为参数,它将被转换为数值并且小数点后的值将被截断。看看下面的示例。
Math.floor('12.75');
>> 12
Math.floor([-4.445]);
>> -5
Math.floor(null);
>> 0
Math.floor(undefined);
>> NaN
Math.floor(NaN);
>> NaN
Math 对象的静态方法 Math.trunc 删除目标值的小数部分并检索目标值的整数部分。这里我们解释如何使用 Math 对象的 Math.trunc 方法。
删除小数位 (trunc)
Math 对象的 Math.trunc 方法删除目标值的小数部分以获得整数部分。格式如下。
Math.trunc(数值)
从参数中指定的数字中删除小数位并仅返回整数部分。如果参数不是数字,则将其转换为数字,得到去掉小数点后的值。
看看下面的示例。
Math.trunc(4.72);
>> 4
Math.trunc(-152.4435);
>>-152
Math.trunc(0.66);
>> 0
返回删除所有小数位的值,无论小数位是多少。
如果将非数值指定为参数,它将被转换为数值并去除小数点后的值。
Math.trunc('32.14');
>> 32
Math.trunc([-4.75]);
>>-4
Math.trunc(未定义);
>>NaNs
Math.trunc(NaN);
>>NaNs
Math.max,Math 对象的静态方法,返回指定为参数的多个值中的最大值。另外,Math.min 返回指定为参数的多个值中的最小值。这里,我们将说明如何使用 Math 对象的 Math.max 方法和 Math.min 方法。
获取最大值(max)
Math 对象的 Math.max 方法返回指定为参数的值中的最大值。格式如下。
Math.max([Number1[, Number2[, ...]]])
从参数中指定的多个值中返回最大值作为返回值。如果参数不是数字,则在执行比较之前将其转换为数字。如果没有给出参数,则返回 -Infinity;如果参数中的任何值为 NaN,则返回 NaN。
看看下面的示例。
Math.max(4, 10.2, 16, -2);
>> 16
Math.max(7);
>> 7
Math.max();
>> -Infinity
第一个示例指定了四个参数。它返回 16,这是参数中的最大值。第二个示例仅指定一个参数。在这种情况下,参数的值按原样返回。示例中没有再次指定参数。在这种情况下,返回 -Infinity。
这次当参数中有非数值时。
Math.max(7, '8.4', [3]);
>> 8.4
Math.max(4, NaN);
>> NaN
Math.max(8, 2, undefined);
>> NaN
如果将非数值指定为参数,则在比较之前将其转换为数值。第一个示例包含一个字符串或数组值,但是当转换为数字时它变成了数字,因此它返回转换为数字的最大值。第二个和第三个示例返回 NaN,因为参数包含 NaN 或转换为 NaN 的数字的值。
获取最小值(min)
Math 对象的 Math.min 方法返回指定为参数的值中的最小值。格式如下。
Math.min([Number1[, Number2[, ...]]])
从参数中指定的多个值中返回最小值作为返回值。如果参数不是数字,则在执行比较之前将其转换为数字。如果没有给出参数,则返回 Infinity,如果参数中的任何值为 NaN,则返回 NaN。
看看下面的示例。
Math.min(4, 10.2, 16, -2);
>> -2
Math.min(7);
>> 7
Math.min();
>> Infinity
第一个示例指定了四个参数。它返回 -2,这是参数中的最小值。第二个示例仅指定一个参数。在这种情况下,参数的值按原样返回。示例中没有再次指定参数。在这种情况下返回无穷大。
这次当参数中有非数值时。
Math.min(7, '8.4', [3]);
>> 3
Math.min(4, NaN);
>> NaN
Math.min(8, 2, undefined);
>> NaN
如果将非数值指定为参数,则在比较之前将其转换为数值。第一个示例包含一个字符串或数组值,但是当转换为数字时,它变成了数字,因此返回转换为数字的最小值。第二个和第三个示例返回 NaN,因为参数包含 NaN 或转换为 NaN 的数字的值。
Math 对象的静态方法 Math.random 生成并返回一个随机数。本节介绍如何使用 Math 对象的 Math.random 方法。
生成随机数(random)
Math 对象的 Math.random 方法生成并返回一个随机数。格式如下。
Math.random()
创建并返回一个大于或等于 0 且小于 1 的随机浮点数。无法为随机数指定种子(类似于生成随机数的设置值)。
看看下面的示例。
for (let i = 0 ; i < 5 ; i++){
console.log(Math.random());
}
>> 0.46734844249381324
>> 0.8023117892739917
>> 0.33077513353347476
>> 0.6943056771845824
>> 0.09784138022219802
产生了5个大于等于0小于1的随机值。每次运行时此值都会更改。
比如你想得到一个1到10(含10)之间的随机整数,写法如下。
for (let i = 0 ; i < 5 ; i++){
let num = Math.floor(Math.random() * 10) + 1;
console.log(num);
}
>> 10
>> 6
>> 8
>> 2
>> 6
更一般地说,如果你想得到一个介于 n 和 m 之间的随机整数,包括 n 和 m,写发如下:
function getRandam(n, m){
for (let i = 0 ; i < 5 ; i++){
let num = Math.floor(Math.random() * (m + 1 - n)) + n;
console.log(num);
}
};
getRandam(11, 20);
>> 19
>> 17
>> 20
>> 17
>> 11
Math 对象的静态方法 Math.sqrt 计算指定值的平方根。Math.cbrt 还计算指定值的立方根。本节介绍如何使用 Math 对象的 Math.sqrt 和 Math.cbrt 方法。
计算平方根 (sqrt)
Math 对象的 Math.sqrt 方法计算指定值的平方根。格式如下。
Math.sqrt(数值)
计算指定数字的平方根并返回结果。如果参数不是数字,将其转换为数字,然后取平方根。如果目标数为负数,则返回 NaN。
平方根在这里就不多说了,简单来说,当a = b 2成立时,b称为a的平方根。例如,5 的平方根是平方等于 5 的数。
看看下面的示例。
Math.sqrt(9);
>> 3
Math.sqrt(4);
>> 2
Math.sqrt(2);
>> 1.4142135623730951
计算并获取参数中指定值的平方根。
如果目标值不是数字,则将其转换为数字,然后取平方根。如果目标值为负或 NaN,则返回 NaN。
Math.sqrt('25');
>> 5
Math.sqrt(-16);
>>NaNs
Math.sqrt(NaN);
>>NaNs
Math.sqrt(未定义);
>>NaNs
平方根的 Math 对象的静态属性
Math 对象有两个与平方根相关的静态属性。
Math.SQRT1_2 1/2 的平方根
Math.SQRT2 2 的平方根
这与使用 Math.sqrt 方法计算相同:
Math.sqrt(2);
>> 1.4142135623730951
console.log(Math.SQRT2);
>> 1.4142135623730951
Math.sqrt(1/2);
>> 0.7071067811865476
console.log(Math.SQRT1_2);
>> 0.7071067811865476
计算立方根 (cbrt)
Math 对象的 Math.cbrt 方法计算给定值的立方根(立方根)。格式如下。
Math.cbrt(数值)
计算参数中指定数字的立方根并返回结果。如果参数不是数字,则在计算立方根之前将其转换为数字。如果目标数为负数,则返回 NaN。
关于立方根这里就不多说了,简单来说,当a = b 3成立时,b称为a的立方根。例如,5 的立方根就是立方等于 5 的数。
看看下面的示例。
Math.cbrt(8);
>> 2
Math.cbrt(125);
>> 5
Math.cbrt(16);
>> 2.5198420997897464
计算并获取参数中指定值的立方根。
Math.pow 是 Math 对象的静态方法,它计算给定底数和指数的幂。Math.exp 还将基数作为纳皮尔数 e,并计算给定指数的幂。本节介绍如何使用 Math 对象的 Math.pow 和 Math.exp 方法。
计算功率 (pow)
Math 对象的 Math.pow 方法计算给定底数和指数的幂。格式如下。
Math.pow(基数,指数)
根据指定的底数和指数计算幂并返回结果。如果参数不是数字,将其转换为数字,然后取平方根。
一般情况下,底数为a,指数为n时,a的n次方记为a n,并乘以a n次,如下所示。
a =a x a x a... x a
如果指数为负,则可以表示为:
a-1 = 1/a
a-2 = 1/a2
a-n = /an
如果指数为 0,则无论底数如何,幂的结果都是 1。
a0 = 1
如果指数不是整数,则可以表示为:
a1/2 = √a
a1/3 = 3√a
a1/n = n√a
此时如果基数为负值,则结果可能是复数或虚数。在这种情况下返回 NaN。
立方的样本
看看下面的示例。
Math.pow(2, 3);
>> 8
Math.pow(3, 2);
>> 2
Math.pow(-4, 3);
>> -64
第一个例子是 2 3 = 2 x 2 x 2 = 8。第二个例子是 3 2 = 3 x 3 = 9。最后一个例子是 -4 3 = -4 x -4 x -4 = -64
如果指数为负
如果指数为负:
Math.pow(2, -1);
>> 0.5
Math.pow(2, -2);
>> 0.25
Math.pow(2, -3);
>> 0.125
第一个例子是 2 -1 = 1 / 2 = 0.5。第二个例子是 1 / 2 2 = 1 / 4 = 0.25。最后一个例子是 1 / 2 3 = 1 / 8 =0.125
如果指数为 0
如果指数为 0:
Math.pow(2, 0);
>> 1
Math.pow(5, 0);
>> 1
Math.pow(-3, 0);
>> 1
如果指数为 0,则结果为 1,与底值无关。
如果指数不是整数
下一种情况是指数不是整数。
Math.pow(16, 1 / 2);
>> 4
Math.pow(27, 1 / 3);
>> 3
第一个例子 16 1/2是 16 的平方根,也就是 4。第二个例子 27 1/3是 27 的立方根,也就是 3。
如果指数或基数是 NaN
如果基数是 NaN,则除 1 以外的任何指数都将是 NaN。如果指数为 0,则变为 1。所有 NaN 指数都是 NaN。
Math.pow(NaN, 0);
>> 1
Math.pow(NaN, 1);
>> NaN
Math.pow(NaN, 2);
>> NaN
Math.pow(2, NaN);
>> NaN
如果指数或基数不是数字
如果基数或指数不是数字,则将其转换为数字,然后计算幂。
Math.pow([2], 3);
>> 1
Math.pow(3, '4');
>> NaN
计算 e (exp) 的幂
Math 对象的 Math.exp 方法计算以 e 为底的指定指数的幂。格式如下。
Math.exp(指数)
根据参数中指定的指数计算e 指数并返回结果。如果参数不是数字,将其转换为数字,然后取平方根。
底数 e 是一个称为 Napier 数的值,它是自然对数的底数,作为 Math 对象的静态属性提供。
Math.E 自然对数的底
看看下面的示例。
Math.exp(1);
>> 2.718281828459045
Math.exp(2);
>> 7.38905609893065
Math.pow(Math.E, 1);
>> 2.718281828459045
第一个例子是 e 1,第二个例子是e 2 。最后一个示例是使用 Math.pow 方法的相同操作。