您的位置:首页 > Web前端 > JavaScript

javascript 将数字变为可读取型式

2015-11-12 12:56 591 查看
/**
 * 反转字符串
 * @param {type} str
 * @returns {strrev.str|String}
 */
function strrev(str) {
    var s = '';
    for (var i = 0; i < str.length; i++) {
        s = str[i] + s;
    }
    return s;
}

/**
 * 重复一个字符串
 * @param {type} str 要重复的字符串
 * @param {type} n 重复次数
 * @returns {String}
 */
function str_repeat(str, n) {
    var ren = '';
    for (var i = 0; i < n; i++) {
        ren += str;
    }
    return ren;
}

/**
 * 将数字变为可读
 *最大支持数字
 * 9999 9999 9999 9999
 * 9999 9999 9999 9999
 * 9999 9999 9999 9999
 * 9999 9999 9999 9999
 *
 *---------------------
 * 1234 4567 9012 3456 
 * 7890 1234 5678 9012
 * 
 * 一千二百三十四万
 * 四千五百六十七亿
 * 九千零一十二万
 * 三千四百五十六兆
 * 
 *  七千八百九十万
 *  一千二百三十四亿
 *  五千六百七十八万
 *  九千零一十二 
 *  
 *  -----------------
 * 1234 4567 9012 3456 
 * 7890 1234 5678 9012  
 * 1234 4567 9012 3456 
 * 7890 1234 5678 9012
 * 
 * 一千二百三十四万
 * 四千五百六十七亿
 * 九千零一十二万
 * 三千四百五十六兆
 * 
 *  七千八百九十万
 *  一千二百三十四亿
 *  五千六百七十八万
 *  九千零一十二京
 *  
 * 一千二百三十四万
 * 四千五百六十七亿
 * 九千零一十二万
 * 三千四百五十六兆
 * 
 *  七千八百九十万
 *  一千二百三十四亿
 *  五千六百七十八万
 *  九千零一十二
 *
 *万 2 4 6 8 
 *亿 3 7 11 15
 *兆 5 13
 *京 9
 *
 * 万亿兆京
 * 个十百千
 */
function number_read(n) {
    var an = String(n).split('.');
    var before_n = an[0];//前面 整数部分
    var after_n = an[1];//后面 小数部分

    var before_l_mod_4 = Math.ceil(before_n.length / 4);

    var re_before_n = strrev(before_n);//倒序字符串
    var arr_before_n = [];
    //将字符串变数组从左到右4位一组
    for (var i = 0; i < before_l_mod_4; i++) {
        arr_before_n[i] = strrev(re_before_n.substr(i * 4, 4));
    }

    var rzt = [];
    for (var k in arr_before_n) {
        var rzt2 = [];
        var j = arr_before_n[k];

        if (parseInt(j) == 0) { //如果4个数字全为0时
            rzt.push([]);
            continue;
        }

        for (var i = 0; i < j.length; i++) {

            if (i < 2 && j[i + 1] == 0 && j[i] == 0) {//下一位是0并且当前位也是0
                //连续多个0只显示一个0
                continue;
            } else if (i + 1 == j.length && j[i] == 0) {
                //最后一个数字为0
                continue;
            }

            var n2 = j.length - i - 1;//重复次数
            rzt2.push(j[i]);
            if (n2 > 0 && j[i] != 0) {
                rzt2.push('1' + str_repeat('0', n2));
            }

        }
        rzt.push(rzt2);
    }

    for (var k in rzt) {
        var k1 = parseInt(k) + 1;
        if (k1 == 9) {
            rzt[k].push('100000000000000000000000000000000');//京
        } else if (k1 == 5 || k1 == 13) {
            rzt[k].push('10000000000000000');//兆
        } else if (k1 == 3 || (k1 - 3) % 4 == 0) {
            rzt[k].push('100000000');//亿
        } else if (k1 % 2 == 0) {
            rzt[k].push('10000');//万
        }
    }
    rzt = rzt.reverse();//颠倒数组中元素的顺序

    //二维数组变一维
    var return_rzt = [];
    for (var k in rzt) {
        var v1 = rzt[k];
        for (var k1 in v1) {
            return_rzt.push(v1[k1]);
        }
    }

    //判断是否存在小数
    if (!after_n) {
        return return_rzt;
    }

    //将小数部分加个数组
    return_rzt.push('.');
    for (var i = 0; i < after_n.length; i++) {
        return_rzt.push(after_n[i]);
    }

    return return_rzt;
}

console.log(number_read('1004000090123450.345677'));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: