新手 js 金额千位格式化函数 有几个问题 高手求解 急用!!!用千位数字举个例子
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了新手 js 金额千位格式化函数 有几个问题 高手求解 急用!!!用千位数字举个例子相关的知识,希望对你有一定的参考价值。
最好用千位数字字符串 举个例子 下面每条语句都是什么意思 谢谢大家了
function(s, n)
n = n > 0 && n <= 20 ? n : 2;
s = parseFloat((s + "").replace(/[^\d\.-]/g, "")).toFixed(n) + ""; //这里面的3个空 有什么关系 正则里面的.-什么意思
var l = s.split(".")[0].split("").reverse(), //后面写[0]是第一个数为什么又split("").
r = s.split(".")[1]; //没懂呀
var len = (s.indexOf("-") != -1) ? l.length - 1 : l.length;//怎么考虑的 !=-1 为真 又要长度-1 ;否则是原有的长度
t = "";
for(i = 0; i < len; i++ )
t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != len ? "," : ""); //没看懂呀 并且这两个条件 举个例子
return ((s.indexOf("-") != -1) ? "-" : "") + t.split("").reverse().join("") + "." + r; //这个返回 举个例子 没懂呀
,
// 保留20位以内的小数位
n = n > 0 && n <= 20 ? n : 2;
// 这里 +'' 的含义是把数字转化为字符串, 正则里面的 \\. \\- 表示小数点和负号
// 删除掉s中非数字小数点或负号的字符
s = parseFloat((s + "").replace(/[^\\d\\.-]/g, "")).toFixed(n) + "";
// split('.') 作用以小数点把数字拆分为整数部分和小数部分
// l 是浮点数的左边部分也就是整数部分,r 为小数部分
// 比如 s = -123456.789; s.split('.') => ['-123456', '789']
// split('') 作用是将字符串拆分为单个字符的数组
// '-123456.789'.split('.')[0].split('') => ['-','1','2','3','4','5','6']
// .reverse() 颠倒顺序 ['-','1','2','3','4','5','6'].reverse() => ['6','5','4','3','2','1','-']
var l = s.split(".")[0].split("").reverse(),
r = s.split(".")[1]; // '789'
// .indexOf() 判断字符串中是否包含某个字符串, 如果不包含则返回-1
// 此处判断数字中是否有负号 有负号就说明整数部分数字的长度要减一
// 上例 l.length = 7 但是有负号 所以 len = 6
var len = (s.indexOf("-") != -1) ? l.length - 1 : l.length;
t = "";
//
for (i = 0; i < len; i++)
// l = ['6','5','4','3','2','1','-']
// 此处通过对 i + 1 做余数运算来判断插入逗号的位置
// (i + 1) % 3 == 0 每三位插入一个逗号
// (i + 1) != len 数字最开头不用打逗号
// 结果:t = '654,321'
t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != len ? "," : ""); //没看懂呀 并且这两个条件 举个例子
// 有负号就在开头加上负号
// 然后把顺序颠倒回来 把小数部分连接回来
// '-123,456.789'
return ((s.indexOf("-") != -1) ? "-" : "") + t.split("").reverse().join("") + "." + r; //这个返回 举个例子 没懂呀
参考技术A function(s, n)
n = n > 0 && n <= 20 ? n : 2; //n大于20则记为2
s = parseFloat((s + "").replace(/[^\\d\\.-]/g, "")).toFixed(n) + "";
//parseFloat((s + "").replace(/[^\\d\\.-]/g, "")).toFixed(n) 这部分是将s去除掉非小数点非数字非减号的部分,然后按照n位小数输出.
//\\.是一个整体,表示真实的小数点,\\.-没意义,只是正好\\.和-在一起了, 这里的-其实表示的是负号
//两处+""都是表示强制转换为字符串
var l = s.split(".")[0].split("").reverse(), //后面写[0]是第一个数为什么又split("").
//s.split(".")[0] 取出小数点前面的部分,
//.split("") 将取出的字符串转成数组
//reverse()将数组逆序排列
r = s.split(".")[1]; //没懂呀
//取出s小数点后面的部分, 在前面增加一个var 更好些
var len = (s.indexOf("-") != -1) ? l.length - 1 : l.length;//怎么考虑的 !=-1 为真 又要长度-1 ;否则是原有的长度
//这句的意思是,如果数字以负号开头,则l的长度少算一个.
//另一种表述方式可以是 var len = (s[0] == "-") ? (l.length-1) : l.length;
t = ""; //这里貌似少了一个var
for(i = 0; i < len; i++ )
t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != len ? "," : ""); //没看懂呀 并且这两个条件 举个例子
//三目运算符不解释,目的是判断要不要增加一个逗号
//判断条件有两个,需同时成立
//(i + 1) % 3 == 0 表示是否是3的倍数,也就是说是不是该写逗号了
//(i + 1) != len 表示不是最后一个,意思是最后的位置即使正好是3的倍数了也不需要写逗号
return ((s.indexOf("-") != -1) ? "-" : "") + t.split("").reverse().join("") + "." + r; //这个返回 举个例子 没懂呀
//(s.indexOf("-") != -1) ? "-" : "") 写不写负号
//t.split("").reverse().join("") 将t反转一遍,利用的是数组的逆序排列方法,所以字符串转数字,逆序排列,然后数组转字符串
//"." + r 拼装小数点后面的部分
以上是关于新手 js 金额千位格式化函数 有几个问题 高手求解 急用!!!用千位数字举个例子的主要内容,如果未能解决你的问题,请参考以下文章