生成一个 a 到 b 之间的随机数:
function getRandomNum (n) {
return Math.floor(Math.random() * (b - a + 1)) + a
}
生成一个 n 位的随机数:
function getRandomNum(n) {
let num = ''
for (let i = 0; i < n; i++) {
num += Math.floor(Math.random() * 10)
}
return num
}
console.log(getRandomNum(3)) // 随机生成一个三位的数字
生成 0 到 n 之间的不重复随机数:
function getRandomNum (n) {
let count = n + 1
let arr = []
for(let i=0; i<count; i++){
arr[i] = i
}
arr.sort(function() {
return 0.5 - Math.random();
})
let result = ''
for(let i=0; i<count; i++){
result += arr[i]+ ','
}
return result
}
console.log(getRandomNum(5)) // 随机生成 0 到 5 之间的不会重复的数字
解决浮点数加减乘除出现的精度丢失问题:
基本思路都是将浮点数转换为整数再进行运算。
乘法:
function toMultiply(num1 = 0, num2 = 0) {
const s1 = num1.toString()
const s2 = num2.toString()
const a1 = s1.split('.')
const a2 = s2.split('.')
const d1 = a1.length > 1 ? a1[1].length : 0
const d2 = a2.length > 1 ? a2[1].length : 0
return (s1.replace('.', '') * s2.replace('.', '')) / Math.pow(10, (d1 + d2))
}
console.log(toMultiply(1.2,2.23)) // 2.676
console.log(1.2 * 2.23) // 2.6759999999999997
除法:
function toDivide(num1 = 0, num2 = 0) {
const s1 = num1.toString()
const s2 = num2.toString()
const a1 = s1.split('.')
const a2 = s2.split('.')
const d1 = a1.length > 1 ? a1[1].length : 0
const d2 = a2.length > 1 ? a2[1].length : 0
return (s1.replace('.', '') / s2.replace('.', '')) / Math.pow(10, (d1 - d2))
}
console.log(toDivide(1.2, 6)) // 0.2
console.log(1.2 / 6) // 0.19999999999999998
加法:
function toIncrement(num1 = 0, num2 = 0) {
const a1 = num1.toString().split('.')
const a2 = num2.toString().split('.')
const d1 = a1.length > 1 ? a1[1].length : 0
const d2 = a2.length > 1 ? a2[1].length : 0
const d = Math.pow(10, Math.max(d1, d2))
return (toMultiply(num1, d) + toMultiply(num2, d)) / d
}
console.log(toIncrement(1.2,2.23)) // 3.43
console.log(1.2 + 2.23) // 3.4299999999999997
减法:
function toSubtract(num1 = 0, num2 = 0) {
const a1 = num1.toString().split('.')
const a2 = num2.toString().split('.')
const d1 = a1.length > 1 ? a1[1].length : 0
const d2 = a2.length > 1 ? a2[1].length : 0
const d = Math.pow(10, Math.max(d1, d2))
return (toMultiply(num1, d) - toMultiply(num2, d)) / d
}
console.log(toSubtract(0.3, 0.1)) // 0.2
console.log(0.3 - 0.1) // 0.19999999999999998