/**
* 反转字符串
* @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'));