数字格式化:设置千分位分隔符

11 篇文章 0 订阅
3 篇文章 0 订阅

直接上代码【作为自己的工具函数记录使用】

步骤描述

1. 基本的数据判空、正负判断、小数与整数的各自截取处理

2. 数据的长度判断、数据反转、每3位增加千分位分隔符并进行回调,直到全部加完

3. 千分位符加完之后,处理数据的正负,以及数据回正

	function setSeperate(num){
	  // 对数据进行初步的筛选
	  num = String(Number(num)) !== 'NaN' ? Number(num) : 0;
	  if(num == 0) return 0;
	  // 判断是整数还是负数
	  let isNagative = num < 0 ? true : false;
	  num = Math.abs(num);
	
	  // 判断这个数值是否有小数,进行分割(当这个数值是整数的时候,整数部分就是这个数)
	  let pointPosition = String(num).indexOf(".") == -1 ? String(num).length :  String(num).indexOf(".");
	  // 整数部分
	  let integerStr = String(num).slice(0,pointPosition)
	  // 小数部分
	  let pointStr = String(num).slice(pointPosition)
	
	  // 给字符串加上千分位(整数部分)
	  function addCode(str,startIndex = 0){
	    // 如果这个数据整数部分没有超过三位数,直接返回
	    if(String(str).length <= 3) return str;
	
	    // 在初次处理数据之前,将数据进行翻转 654321 翻转之后得到 123456 
	    if(startIndex == 0){
	      str = str.split("").reverse().join("")
	    }
	
	    // 当前用于操作的字符串的长度
	    str = str.slice(0,startIndex+3)+','+str.slice(startIndex+3)
	
	    // 这里加4表示:三个字符加上一个分隔符号
	    // 每加一次千分位符号之后,判断剩余的数字的个数(不包含分隔符),并更新截取位点
	    // 如 123456(翻转之后的数据) 这个起始截取位点是 0, 处理之后是 123,456, 则下一次截取位点就是4,从4这个数字开始继续下一轮处理
	    startIndex = startIndex + 4;
	
	    // 这个是用于下一次操作的数据,长度不超过3的时候也是直接返回,否则就继续回调
	    let surplusStr = str.slice(startIndex)
	    if(surplusStr.length > 3){
	      return addCode(str, startIndex)
	    }
	    // 返回数据,将数据的顺序回正  123,456 变成 654,321
	    return str.split("").reverse().join("")
	  }
	  // 将整数部分与小数部分拼接起来
	  let result = addCode(integerStr)+pointStr;
	  // 是负数的加上符号
	  return isNagative ? ('-'+result) : result;
	}
	
	console.log(setSeperate(99999.88));// 99,999.88
	console.log(setSeperate(9999.88));// 9,999.88
	console.log(setSeperate(99.88));// 99.88
	console.log(setSeperate(0.988));// 0.988
	console.log(setSeperate(12345678));// 12,345,678
	console.log(setSeperate(5677777777777));// 5,677,777,777,777
	console.log(setSeperate(-100000.01));// -100,000.01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值