一、千位分隔符
1.1 for循环逐个判断
function numFormat (num) {
num = num.toString().split('.') // 分割小数点
let arr = num[0].split('').reverse() // 整数部分变成数组并倒序
let len = arr.length
let res = []
for(let i = 0; i < len; i++) {
if(i % 3 === 0 && i !== 0) {
res.push(',')
}
res.push(arr[i])
}
res.reverse()
if(num[1]) {
res = res.join('').concat('.' + num[1])
} else {
res = res.join('')
}
return res
}
1.2 toLocalString
let a = 1234567890.65785
console.log(a.toLocaleString())
// 1,234,567,890.658 结果会根据具体规则进行转换
1.3 正则
function numFormat (num) {
return num.toString().replace(/\d+/, function (n) { // 选出整数
return n.replace(/(\d)(?=(\d{3})+$)/g, function (n) {
return n + ','
})
})
}
参考:https://www.jianshu.com/p/928c68f92c0c
二、判断一个数是否为素数
2.1 判断2~n-1
function isPrime (num) {
let temp = num - 1
for(let i = 2; i <= temp; i++) {
if(num % i === 0) return false
}
return true
}
2.2 判断2~sqrt(n)
function isPrime (num) {
let temp = Math.sqrt(num)
for(let i = 2; i <= temp; i++) {
if(num % i === 0) return false
}
return true
}
2.3 判断与6的倍数是否有关
function isPrime (num) {
if(num == 2 || num == 3) return true // 两个小于5的直接处理
if(num % 6 != 1 && num % 6 != 5) return false // 不在6的倍数两侧的一定不是质数
let temp = Math.sqrt(num)
// 在6的倍数两侧的也可能不是质数
for(let i = 5; i <= temp; i += 6) {
if(num % i == 0 || num % (i + 2) == 0) return false
}
return true
}
参考:https://blog.csdn.net/huang_miao_xin/article/details/51331710