Math 相关代码片段

在指定的范围内生成一个随机整数

使用 Math.random() 生成一个随机数并将其映射到所需的范围,使用 Math.floor() 使其成为一个整数。

const randomIntegerInRange = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min;
randomIntegerInRange(0, 5) // 2

求整数和小数部分、上整、下整、四舍五入

let num = 5.32
let intPart = parseInt(num) // 5
let decPart = num % 1 // 0.3200000000000003 (有精度问题,不过不影响)
let ceil = Math.ceil(num) // 6
let floor = Math.floor(num) // 5
let round1 = Math.round(5.32) // 5
let round2 = Math.round(5.62) // 6

精确的几位小数

使用 Math.round() 和模板字面量将数字四舍五入为指定的小数位数。 省略第二个参数 decimals ,数字将被四舍五入到一个整数。

const round = (n, decimals=0) => Number(`${Math.round(`${n}e${decimals}`)}e-${decimals}`);
round(1.005, 2) // 1.01

斐波纳契数组发生器

创建一个指定长度的空数组,初始化前两个值( 0 和 1 )。使用 Array.reduce() 向数组中添加值,使用最的值是两个值的和(前两个除外)。

const fibonacci = n =>
  Array(n).fill(0).reduce((acc, val, i) => acc.concat(i > 1 ? acc[i - 1] + acc[i - 2] : i), []);
fibonacci(5) // [0,1,1,2,3]

最大公约数

使用递归。当 y 等于 0 的情况下,返回 x 。否则,返回 y 和 x/y 余数最大公约数。

const gcd = (x, y) => !y ? x : gcd(y, x % y);
gcd(8, 36) // 4

阶乘

使用递归。如果 n 小于或等于 1 ,则返回 1 。否则返回 n 和 n - 1 的阶乘。

const isEven = num => num % 2 === 0;
isEven(3) // false

判断奇偶数

使用模运算符(%)来检查数字是奇数还是偶数。如果数字是偶数,则返回 true ,如果是奇数,则返回 false 。

const isEven = num => num % 2 === 0;
isEven(3) // false

可以被某个数整除

使用模运算符(%)来检查余数是否等于 0 。

const isDivisible = (dividend, divisor) => dividend % divisor === 0;
isDivisible(6,3) // true

两点之间的欧氏距离

使用 Math.hypot() 计算两点之间的欧氏距离( Euclidean distance)。

const distance = (x0, y0, x1, y1) => Math.hypot(x1 - x0, y1 - y0);
distance(1,1, 2,3) // 2.23606797749979

将数字转化为千分位格式

使用 toLocaleString() 将浮点数转换为 Decimal mark 格式。 将整数部分转化为用逗号分隔的字符串。

const toDecimalMark = num => num.toLocaleString('en-US');
toDecimalMark(12305030388.9087); // "12,305,030,388.909"

MIT Licensed | Copyright © 2018-present 滇ICP备16006294号

Design by Quanzaiyu | Power by VuePress