新手 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; //这个返回 举个例子 没懂呀

,

function f(s, n) 
    // 保留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 金额千位格式化函数 有几个问题 高手求解 急用!!!用千位数字举个例子的主要内容,如果未能解决你的问题,请参考以下文章

如何用C#语言编程小写金额转换大写金额?求高手解答……

number_formate 货币金额或数量格式化

简单的js正则表达式问题

关于js中验证所填时间与当前时间大小的比较

Charts.js 使用货币和千位分隔符格式化 Y 轴

千位分组来格式化数字函数