paddingNum
额,这名字不是我命名的,但是也挺形象的吧,那就叫 paddingNum 吧
题目是这样的
将数字串分割,每隔3位用逗号隔开
eg: 1234 => 1,234;
eg: 1234.5678 => 1,234.567,8
toLocaleString
第一题,1234,这个好解决啊,toLocaleString函数就解决了
Number(1234).toLocaleString() //1,234
第二题,1234.5678,问题来了
Number(1234.5678).toLocaleString() //1,234.567
运行后发现,小数点后面只能够有3位,原因未知,咱先想办法解决一下当前问题
解决方法
我开了一下脑洞啊
就是,既然 toLocaleString 使整数部分正常,那我就把 1234.5678 以小数点为边界,划分成2个部分再使用 toLocalString 就好了啊
思路
- 拆分小数点左右两边,变成1234和5678
- 1234的直接用 toLocaleString 即可变成1,234
- 5678先倒叙,reserve 成8765
- 倒叙后再用 toLocaleString 即可变成 8,765
- 再倒叙回来,变成567,8
- 两部分相加,就得出1,234.567,8了
完整代码如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>数字分割</title>
</head>
<body>
<h3>1234的分割</h3>
<p></p>
<h3>1234.567的分割</h3>
<p></p>
<h3>1234.5678的分割(出事了)</h3>
<p></p>
<h3>1234.5678的分割</h3>
<p></p>
<script>
document.getElementsByTagName('p')[0].innerHTML = Number(1234).toLocaleString()
document.getElementsByTagName('p')[1].innerHTML = Number(1234.567).toLocaleString()
document.getElementsByTagName('p')[2].innerHTML = Number(1234.5678).toLocaleString() + '(这里可以发现,小数点后只有3位)'
let num = 1234.5678
let strNum = new String(num)
let pointIndex = strNum.indexOf('.')
// console.log(pointIndex) //4
// 如果string是一个array,那自然就有下标了,咱们来输出试试
// console.log(strNum[0]) //1,成功输出
// 分割小数点前后,也就是 0-3 一组,5-8 一组
let strNum_1 = ''
let strNum_2 = []
for (let i = 0; i < pointIndex; i++) {
strNum_1 += strNum[i]
}
console.log(strNum_1) //1234
strNum_1 = Number(strNum_1).toLocaleString()
console.log(strNum_1) //1,234
let k = 0
for (let i = (pointIndex + 1); i < strNum.length; i++) {
strNum_2[k] = strNum[i]
k++
}
console.log(strNum_2) //5,6,7,8
// 先逆序,再加标点
strNum_2 = strNum_2.reverse()
console.log(strNum_2) //8,7,6,5
strNum_2 = strNum_2.join('')
console.log(strNum_2) //8765
strNum_2 = Number(strNum_2).toLocaleString()
console.log(strNum_2) //8,765
// 再逆序
let tempArr = []
for (let i = 0; i < strNum_2.length; i++) {
tempArr[i] = strNum_2[i]
}
console.log(tempArr) // 8,,,7,6,5
strNum_2 = tempArr.reverse().join('')
console.log(strNum_2) //567,8
let result = strNum_1 + '.' + strNum_2
console.log(result)
document.getElementsByTagName('p')[3].innerHTML = result
</script>
</body>
</html>