JS实现金额千分位化(十六)

简介: JS实现金额千分位化(十六)

一.金额千分位化


在前端展示,尤其是关于财务系统时,通常要把金额千分位处理,如1234567.234 需要转换成 1,234,567.23 。


这样的解决思路是:


1.数字有正负之分, 要把符号位单独拿出来。

2.将数字按照整数位和小数位分别进行处理, 整数位是倒着排序,隔3位加上个,

3.将数字通过parseFloat() 方法转换成小数,进行有效位数二位的处理。

4.需要将字符串转换成相应的数组形式。


二.转换


如传入的参数为: 12345678.234 的形式。


function number(num){
  var noNegative = true; //默认是正值。
  var s=(num + "").replace(/[^\d\.-]/g, ""); //把数字和. 换成空格,也就是前面均加上""
  //此时,转换后的值为 12345678.234   数字与数字之间, .之间,均有"" 
  s=parseFloat(s).toFixed(2); //先转换成小数,后四舍五入两位小数,为12345678.23
  s=s+""; //转换成字符串
  if(parseFloat(s) < 0){ //是负数
    s = Math.abs(s).toFixed(2) + "";  //先转换成正数,然后取两位小数
    noNegative = false; //标志位为负数
  }
  var zheng=s.split(".")[0]; //取出前面的整数值。 为12345678
  var zhengArr=zheng.split("").reverse(); //先按照""进行拆分,后进行反转。
  // 拆分时,为1,2,3,4,5,6,7,8  反转后为8,7,6,5,4,3,2,1
  var dian=s.split(".")[1]; //取出小数部分,为23
  var t="";
  for(var i=0;i<zhengArr.length;i++){
    if(i%3==2&&i!=zhengArr.length-1){ //为第三位,并且并不是最后了。如123456时,6并不加,
      t+=zhengArr[i]+",";
    }else{
      t+=zhengArr[i]+""; //加上空格
    }
  }
  //此时,t的值为876,543,21, 反转后为12,345,678 
  //进行拼接, 符号位+ 反转后的数字+小数点+小数部分
  var value= (noNegative?"":"-")+t.split("").reverse().join("")
  +"."+dian;
  // 输出的值,就是12,345,678.23  
}


写成相应的方法为: formatMoney


var formatMoney=function(s){
  var noNegative = true;
  s = parseFloat((s + "").replace(/[^\d\.-]/g, "")).toFixed(2) + "";
  if(parseFloat(s) < 0){
    s = Math.abs(s).toFixed(2) + "";
    noNegative = false;
  }
  var l = s.split(".")[0].split("").reverse(),
    r = s.split(".")[1];
  t = "";
  for(i = 0; i < l.length; i++) {
    if(i%3==2&&i!=l.length-1){
      t+=l[i]+",";
    }else{
      t+=l[i]+""; //加上空格
    }
  }
  return (noNegative?"":"-") + t.split("").reverse().join("") + "." + r;
}


三. 普通简单的方式,利用数组转换


var formatMoney=function(s){
  var noNegative = true; //默认是正值。
  s=parseFloat(s+"").toFixed(2); //先转换成小数,后四舍五入两位小数,为12345678.23
  s=s+""; //转换成字符串
  if(parseFloat(s) < 0){ //是负数
    s = Math.abs(s).toFixed(2) + "";  //先转换成正数,然后取两位小数
    noNegative = false; //标志位为负数
  }
  var zheng=s.split(".")[0]; //取出前面的整数值。 为12345678。
  var dian=s.split(".")[1]; //取出小数部分,为23
  //将整数部分,利用字符串的charAt() 方法,转换成数组。
  var zhengArr=[];
  for(var i=0;i<zheng.length;i++){
    zhengArr.push(zheng.charAt(i)); //放入的值为 1,2,3,4,5,6,7,8
  }
  zhengArr=zhengArr.reverse(); //反转后为8,7,6,5,4,3,2,1
  var t="";
  for(var i=0;i<zhengArr.length;i++){
    if(i%3==2&&i!=zhengArr.length-1){ //为第三位,并且并不是最后了。如123456时,6并不加,
      t+=zhengArr[i]+",";
    }else{
      t+=zhengArr[i]+""; //加上空格
    }
  }
  //此时,t的值为876,543,21, 反转后为12,345,678 
  return (noNegative?"":"-")+t.split("").reverse().join("")
  +"."+dian;
}


去除相应的注释之后为:


var formatMoney=function(s){
  var noNegative = true; //默认是正值。
  s=parseFloat(s+"").toFixed(2); 
  s=s+""; //转换成字符串
  if(parseFloat(s) < 0){ //是负数
    s = Math.abs(s).toFixed(2) + "";  
    noNegative = false; 
  }
  var zheng=s.split(".")[0]; 
  var dian=s.split(".")[1]; 
  //将整数部分,利用字符串的charAt() 方法,转换成数组。
  var zhengArr=[];
  for(var i=0;i<zheng.length;i++){
    zhengArr.push(zheng.charAt(i));
  }
  zhengArr=zhengArr.reverse();
  var t="";
  for(var i=0;i<zhengArr.length;i++){
    if(i%3==2&&i!=zhengArr.length-1){ //为第三位,并且并不是最后了。如123456时,6并不加,
      t+=zhengArr[i]+",";
    }else{
      t+=zhengArr[i]+""; //加上空格
    }
  }
  return (noNegative?"":"-")+t.split("").reverse().join("")
  +"."+dian;
}


谢谢!!!

相关文章
|
2月前
|
前端开发 JavaScript 算法
轻松实现数字格式化:JavaScript 中的千分位分隔技巧大揭秘
轻松实现数字格式化:JavaScript 中的千分位分隔技巧大揭秘
76 0
|
7月前
|
JavaScript
js金额补充--2位小数0demo效果(整理)
js金额补充--2位小数0demo效果(整理)
|
9月前
|
JavaScript 前端开发
javascript整数千分位格式化函数
javascript整数千分位格式化函数
52 0
|
11月前
|
JavaScript
js将金额小写转化为大写
js将金额小写转化为大写
|
11月前
|
JavaScript
js 将数值金额转换成大写金额
js 将数值金额转换成大写金额
43 0
|
JavaScript 前端开发
利用JavaScript实现二级联动
利用JavaScript实现二级联动 要实现JavaScript二级联动效果,首先要确定需要哪些技术: 二维数组 for in循环 new Option(text,value,true,true) add(option,null) onchange() 表单事件 HTML代码: &lt;!-- &lt;input type=&quot;text&quot; id=&quot;text&quot;&gt; --&gt; 请选择省份: &lt;select name=&quot;&quot; id=&quot;provinces&quot;&gt; &lt;!-- &lt;option value=&quot;江苏省&quot;&gt;江苏省&lt;/option&gt;
|
JavaScript 前端开发
JavaScript函数柯里化的实现原理,进来教你完成一个自己的自动实现柯里化方法
JavaScript函数柯里化的实现原理,进来教你完成一个自己的自动实现柯里化方法
167 0
|
移动开发 JavaScript weex
weex-自定义module,实现weex在iOS的本地化,js之间互相跳转,交互,传值(iOS接入weex的最佳方式)
weex-自定义module,实现weex在iOS的本地化,js之间互相跳转,交互,传值(iOS接入weex的最佳方式)
219 0
|
JavaScript
JS中实现或退出全屏
JS中实现或退出全屏
153 0