精华内容
下载资源
问答
  • 在项目中做货币转换的时候经常需要可以实现自动格式化输入的数字,自动千位分隔符,在网上也看到一些其他网友的实现的代码,感觉都不是太满意,于是自己研究了下,分享给大家。
  • 通过添加千位分隔符将数字转换为更易读的格式的函数。 这个非常简单的函数允许您选择要返回的千位分隔符和小数位数。 任何字符(包括空格)都可以作为分隔符。 例如 千分之一(1234.567,',',1) 返回字符串'1,...
  • C#千位分隔符

    2013-07-25 20:51:49
    C#千位分隔符 并且去掉了点 希望对大家有帮助
  • 即使用千位分隔符 —— 三位一个逗号间隔。比如: 1234567890 --> 1,234,567,890 5236 --> 5,236 这种的数字格式生活中也是非常常见,比如支付宝花呗额度: 方案一:Number.prototype.toLocaleString() 方


    问题描述

    最近面试遇到了一个数字格式转化的问题:把一个大数(位数很多)用金融数字样式表示。即使用千位分隔符 —— 三位一个逗号间隔。比如:

    • 1234567890 --> 1,234,567,890
    • 5236 --> 5,236

    这种的数字格式生活中也是非常常见,比如支付宝花呗额度:

    在这里插入图片描述

    方案一:Number.prototype.toLocaleString()

    toLocaleString()这个方法作用是把数字转换为字符串并使用三位分节法进行显示。如果是浮点数,还会进行四舍五入并保留三位小数的操作。

    如果没有其他的格式要求,toLocaleString()绝对是最简单的方案。

    function formatNumber(num){
        return num.toLocaleString();
    }
    
    //测试
    console.log(formatNumber(1384125862));
    console.log(formatNumber(1234567890.125462));
    
    //输出
    1,384,125,862
    1,234,567,890.125
    

    方案二:正则表达式

    这种字符串匹配的操作完全可以用正则表达式来解决。这里优化一点:如果是浮点数,还支持再传一个参数decimal来指定四舍五入后保留的小数位数。

    function formatNumber(num,decimal){
        let str = num.toFixed(decimal).toString();
        let reg = str.indexOf(".") > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(?:\d{3})+$)/g;
        return str.replace(reg,"$1,");
    }
    

    该方法的核心思路是:利用正则表达式匹配到每三位数字的末位数,然后在其后添加逗号

    1384125862..toString().match(/(\d)(?=(?:\d{3})+$)/g)
    // [ '1', '4', '5' ]
    

    添加逗号的操作借助的是字符串对象原型的replace方法,该方法本身是用于字符串替换的,这里通过添加$1的位置标识符,来巧妙的完成添加操作。

    测试输出一致:

    //测试
    console.log(formatNumber(1384125862));
    console.log(formatNumber(1234567890.125462,3));
    
    //输出
    1,384,125,862
    1,234,567,890.125
    

    方案三:原生JS —— 数组map()方法遍历

    那如果不借用现有的实例方法,让你自己动手去用原生JS实现呢?我当时在面试时就比较蠢,前两种方法都没想到,直接用的是原生JS实现。

    考虑到浮点数的情况,就仍然先进行四舍五入保留小数的操作。然后根据小数点把数据拆分为整数和小数两部分。

    function formatNumber(num,decimal){
    	var splits=[],res=[];
    	var splits = num.toFixed(decimal).toString().split(".");
    	splits[0].split("").reverse().map(function(item,index){
    		if(index % 3 == 0 && index != 0){
                res.push(","); 
            }
    		res.push(item);
    	});
    	return res.reverse().join("")+(splits.length>1 ? "."+splits[1] : "");
    }
    

    接下来着重处理整数部分splits[0]

    继续拆分成单字符的数组,然后逆序排列后每3位插入一个逗号(因为逗号是从后往前加)。具体用的是map方法遍历,把每一项item都重新添加到res这个输出数组中。其中每一次都判断下标位置,在能被3整除并且是非零位时,就加入一个逗号

    如果遍历结束后输出res的逆序形式的话,将会是这个样子,以1384125862为例:

    [
      '1', ',', '3', '8',
      '4', ',', '1', '2',
      '5', ',', '8', '6',
      '2'
    ]
    

    之后再进行一次res数组的逆序排列,重新join成字符串。最后再判断一次是否有小数部分,有的话加上即可。

    测试输出仍然一致:

    //测试
    console.log(formatNumber(1384125862));
    console.log(formatNumber(1234567890.125462,3));
    
    //输出
    1,384,125,862
    1,234,567,890.125
    

    方案四:原生JS —— 数组splice()方法截取

    后来又想到还可以利用数组截取元素的方式来编写算法。仍然是先拿到整数部分splitNum[0],然后拆分成单字符数组arr

    function formatNumber(num,decimal){
    	let splitNum = num.toFixed(decimal).toString().split(".");
    	let arr = splitNum[0].split("");
    	let res = [];
    	while(arr.length > 0){
    		res.unshift(arr.splice(-3).join(""));
    	}
    	return res.join(",")+(splitNum.length > 1 ? "."+splitNum[1] : "");
    }
    

    核心API是数组的splice()方法,由于我们是从后往前每三位一个逗号分隔,所以我们需要每次截取末尾三位元素,这时候给splice方法传参-3就可以完美解决。而且splice()方法本身是会改变原数组的,这正合我意,正好可以用来做while循环的条件判断:

    每次循环都会截取掉数组arr末尾的三个元素,并添加到res输出数组中(unshift每次都添加到数组头部,也完美解决了顺序问题),此外只要数组arr长度不为零就可以一直循环。

    如果循环结束后输出res数组的话,会是这样的,仍以1384125862为例:

    [ '1', '384', '125', '862' ]
    

    处理到这里就很简单了,直接以逗号为间隔重新转换成字符串。最后再判断一下是否有小数部分,再加上即可。测试输出结果如下:

    //测试
    console.log(formatNumber(1384125862));
    console.log(formatNumber(1234567890.125462,3));
    
    //输出
    1,384,125,862
    1,234,567,890.125
    
    展开全文
  • 1.先创建一个utils文件夹,然后创建... // 分隔小数点 var arr = num[0].split("").reverse(); // 转换成字符数组并且倒序排列 var res = []; for (var i = 0, len = arr.length; i < len; i++) { if (i % 3 ===

    1.先创建一个utils文件夹,然后创建一个filter.js文件:

    function nums(num) {
        num = num.toString().split("."); // 分隔小数点
        var arr = num[0].split("").reverse(); // 转换成字符数组并且倒序排列
        var res = [];
        for (var i = 0, len = arr.length; i < len; i++) {
          if (i % 3 === 0 && i !== 0) {
            res.push(","); // 添加分隔符
          }
          res.push(arr[i]);
        }
        res.reverse(); // 再次倒序成为正确的顺序
        if (num[1]) {
          // 如果有小数的话添加小数部分
          res = res.join("").concat("." + num[1]);
        } else {
          res = res.join("");
        }
        return res;
    }
    export  default{
        nums
        }
    

    2.在main.js中全局挂载过滤器

    import filters from '../src/utils/filter'  //导入过滤器文件
    Object.keys(filters).forEach(key=>{    //通过Object.key方法取出过滤器中导出的每个方法并挂在vue.filter上
      Vue.filter(key,filters[key])
    })
    

    3.最后在需要的.vue文件中直接使用过滤器即可

    {{num  | nums }}   
    //num是data中定义的数据  
    //nums就是添加金额千位逗号分隔符的过滤器
    
    展开全文
  • 介绍: 这个货币转换JS代码,可以实现自动格式化输入的数字,自动千位分隔符
  • JS实现千位分隔符

    千次阅读 2019-03-20 01:42:02
    return s.replace(/^\./,"0.") } 一套完整的金额转换加千位分隔符 js千位符 | js 千位分隔符 | js 金额格式化 js千位符 | js 千位分隔符 | js 金额格式化 保留两位小数(四舍五入): 保留两位小数(不四...

    只适用整数

    		function format (num) {
    		    var reg=/\d{1,3}(?=(\d{3})+$)/g; 
    		    return (num + '').replace(reg, '$&,');
    		}
    		function format(num){
    			 num=num+'';//数字转字符串
    			  var str="";//字符串累加
    			  for(var i=num.length- 1,j=1;i>=0;i--,j++){
    			      if(j%3==0 && i!=0){//每隔三位加逗号,过滤正好在第一个数字的情况
    			          str+=num[i]+",";//加千分位逗号
    			          continue;
    			      }
    			      str+=num[i];//倒着累加数字
    			  }
    			  return str.split('').reverse().join("");//字符串=>数组=>反转=>字符串
    			}
    

    解释

    整数部分加小数部分不动

    var format = (str) => str.replace(/\B(?=(\d{3})+(?!\d))/g, ',')
    或
    var format = (str) => str.split('').reverse().reduce((prev, next, index) => {
         return ((index % 3) ? next : (next + ',')) + prev
    })
    
    	let miliFormat = (() => {  
    		let DIGIT_PATTERN = /(^|\s)\d+(?=\.?\d*($|\s))/g
    		let MILI_PATTERN = /(?=(?!\b)(\d{3})+\.?\b)/g
    		return (num) => num && num.toString()
    			.replace(DIGIT_PATTERN, (m) => m.replace(MILI_PATTERN, ','))
    	})()
    

    解释

    保留两位小数(四舍五入-舍)

    function milliFormat(num){//添加千位符
    	s=num.toString()
    	if(/[^0-9\.]/.test(s)) return "invalid value";
    	s=s.replace(/^(\d*)$/,"$1.");
    	s=(s+"00").replace(/(\d*\.\d\d)\d*/,"$1");
    	s=s.replace(".",",");
    	var re=/(\d)(\d{3},)/;
    	while(re.test(s)){
    		s=s.replace(re,"$1,$2");
    	}
    	s=s.replace(/,(\d\d)$/,".$1");
    	return s.replace(/^\./,"0.")
    }
    

    一套完整的金额转换加千位分隔符

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" lang="zh-cn">
        <head>
          <title>js千位符 | js 千位分隔符 | js 金额格式化</title>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    		<script type="text/javascript">
    		
    			// 将金额类型转为数字类型
    			function toNum(str) {
    				return str.replace(/\,|\¥/g, "");
    			}
     
    			// 保留两位小数(四舍五入)
    			function toPrice(num) {
    				num = parseFloat(toNum(num)).toFixed(2).toString().split(".");
    				num[0] = num[0].replace(new RegExp('(\\d)(?=(\\d{3})+$)','ig'),"$1,");
    				return "¥" + num.join(".");
    			}
    			
    			// 保留两位小数(不四舍五入)
    			function toPrice1(num) {
    				num = parseFloat(toNum(num).replace(/(\.\d{2})\d+$/,"$1")).toFixed(2).toString().split(".");
    				num[0] = num[0].replace(new RegExp('(\\d)(?=(\\d{3})+$)','ig'),"$1,");
    				return "¥" + num.join(".");;
    			}
    			
    			// 不处理小数部分
    			function toPrice2(num) {
    				var source = toNum(num).split(".");
    				source[0] = source[0].replace(new RegExp('(\\d)(?=(\\d{3})+$)','ig'),"$1,");
    				return "¥" + source.join(".");
    			}
    		</script>
        </head>
        <body>
    		<h1>js千位符 | js 千位分隔符 | js 金额格式化</h1>
    		<div>
    			保留两位小数(四舍五入):  <input onchange="this.value=toPrice(this.value)"><br><br>
    			保留两位小数(不四舍五入): <input onchange="this.value=toPrice1(this.value)"><br><br><br>
    			不处理小数部分: <input onchange="this.value=toPrice2(this.value)">
    		</div>
        </body>
    </html>
    

    效果:

    也可参考https://www.jb51.net/article/61585.htm

    展开全文
  • 最近下载了akshare里面的数据,然后发现有些数据格式为1,300这种格式,为str格式,但是又无法直接强制转换之类方式,特地寻求答案,并做笔记,留待自己与后来者一起避坑。 from locale import * ...

    最近下载了akshare里面的数据,然后发现有些数据格式为1,300这种格式,为str格式,但是又无法直接强制转换之类方式,特地寻求答案,并做笔记,留待自己与后来者一起避坑。

    from locale import * 
    atof('123,456')
    
    123456.0

     

    展开全文
  • Java 数字千位分隔符

    万次阅读 2017-06-07 17:42:37
    java中数字的千位分隔符
  • 如果是需要千位分隔符 num.toLocaleString() 如果是需要两位小数 num.toFixed(2) 如果是需要千位分隔符且带两位小数的,使用正则 export function getNumber(val) { if(val){ return val.toFixed(2).replace(/...
  • export function format_number(nStr) { nStr += ""; //数字转换为字符 ... //按照小数点分隔 x1 = x[0]; //整数部分 x2 = x.length > 1 ? "." + x[1] : ""; //小数部分 } else { x1 = nStr; x2 =
  • NSNumber *walletNum = [NSNumber numberWithFloat:9876234.938374]; NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; numberFormatter.numberStyle = NSNumberFormatterRoundFloor;...
  • 所以人们在数字中,每隔三位加进一个逗号,也就是千位分隔符,以便更加容易认出数值。 例如 1,000 一千 1,000,000 一百万 1,000,000,000 十亿 方式一(Java自带函数) 缺点: 当数字很大时,转换会出错。 比如,...
  • 所以人们在数字中,每隔三位加进一个逗号,也就是千位分隔符,以便更加容易认出数值。 处理财务数据时,经常会和千分位符号打交道。经常看数字时,如果位数很多,往往要一位位的,才知道具体的金额。如果有...
  • 使用JS为数字添加千位分隔符

    千次阅读 2019-03-06 13:51:56
    &lt;script&gt; // 目标数字 // 封装一个函数 function change(a) { // 将数字转变后才能字符串,在转变成数组 var b = a.toString().split(""...// 遍历由数字转变成的...
  • 为数字增加千位分隔符

    千次阅读 2019-10-07 18:43:31
    将普通数字加上千位分隔符在涉及金钱的业务上很常见 例如 123456.78 需要显示为123,456.78 使用正则的方法最简单 ``` function numFormat(num){ let res=num.toString().replace(/\d+/, function(n){ // 先提取整数...
  • python 千位分隔符

    千次阅读 2019-01-07 13:06:00
    >>>'{:,}'.format(1234567890) >>>'1,234,567,890' 转载于:https://www.cnblogs.com/sea-stream/p/10232674.html
  • 主要介绍了JS实现的4种数字千位符格式化方法分享,本文给出了4种千分位格式化方法并对它们的性能做了比较,需要的朋友可以参考下
  • 千位分隔符-不是一般的前端

    千次阅读 2018-04-24 11:06:04
    请使用千位分隔符(逗号)表示web网页中的大数字这篇文章发布于 2017年09月16日,星期六,01:47,归类于 web综合。 阅读 11498 次, 今日 10 次by zhangxinxu from http://www.zhangxinxu.com/wordpress/?p=6418...
  • 数字实现千位分隔符

    2020-06-19 18:31:40
    function parseToMoney(num) { num = parseFloat(num.toFixed(3)); let [integer, decimal] = String.prototype.split.call(num, '.'); integer = integer.replace(/\d(?=(\d{3})+$)/g, '$&...
  • reg=/\d{1,3}(?=(\d{3})+$)/g // 表示前面有1~3个数字,后面的至少由一组3个数字结尾 let num =12345678 let result = (num+'').replace(reg, '$&,'); console.log(result)
  • 千位分隔符的完整攻略

    千次阅读 2018-07-26 20:08:00
    千位分隔符[1]是很常见的需求,但是输入文本千变万化,如何才能准确添加千分符呢? 纯整数情况 纯整数大概是所有情况里最简单的一种,我们只要正确匹配出千分位就好了。 观察上面的数字,我们可以得出千分位的...
  • * 字符串 千位符 千位分隔符,并且小数点后保留2位 * @param num * @return */ public static String num2thousand(String num) { String numStr = ""; if (!TextUtils.isEmpty(num)) { return numStr; } ...
  • 经常在工作中遇到将一长串数字格式为以千位分隔符分隔的方式显示,下面提供三种实现方式。
  • 分享JS实现千位分隔符的两种方法 自己最好在 VScode 进行练习,看不如动手来得深刻 方法一:普通方法 <script> // function numFormat(num) { // num = num.toString().split("."); // 分隔小数点 // var ...
  • vue computed属性实现添加千位分隔符

    千次阅读 2020-02-12 11:24:10
    有时,需要对数值添加千分位来进行格式化,可以用computed属性来实现,具体如下: ...<div>总价:¥{{ totalPrice }}</div> vue部分代码: computed:{ totalPrice:function(){ ...i++){...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,334
精华内容 2,533
关键字:

千位数分隔符