算法:数字千分位格式化

题目

数字千分位格式化,例如:
10201004050 转换为 10,201,004,050

思路

注意是逆序判断,每 3 位加个逗号。

思路一:转化为数组,进行 reverse 后遍历,每 3 位进行拆分
思路二:转化为字符串,倒序遍历,每 3 位进行拆分
思路三:正则(性能差)

性能:
数字 > 字符串 > 数组 > 正则

代码

/**
 * 千分位格式化(使用数组)
 * @param n number
 */
export function format1(n: number): string {
    
    
    n = Math.floor(n) // 只考虑整数

    const s = n.toString()
    const arr = s.split('').reverse()
    return arr.reduce((prev, val, index) => {
    
    
        if (index % 3 === 0) {
    
    
            if (prev) {
    
    
                return val + ',' + prev
            } else {
    
    
                return val
            }
        } else {
    
    
            return val + prev
        }
    }, '')
}

/**
 * 数字千分位格式化(字符串分析)
 * @param n number
 */
export function format2(n: number): string {
    
    
    n = Math.floor(n) // 只考虑整数

    let res = ''
    const s = n.toString()
    const length = s.length

    for (let i = length - 1; i >= 0; i--) {
    
    
        const j = length - i
        if (j % 3 === 0) {
    
    
            if (i === 0) {
    
    
                res = s[i] + res
            } else {
    
    
                res = ',' + s[i] + res
            }
        } else {
    
    
            res = s[i] + res
        }
    }

    return res
}

// 功能测试
const n = 10201004050
console.info('format1', format1(n))
console.info('format2', format2(n))

猜你喜欢

转载自blog.csdn.net/weixin_43972437/article/details/130585601