经常要对金额格式化,总结了以下方法。 代码从少到多。

一、最简单,也经常用的:利用字符串提供的toLocaleString()方法处理。(当然,有时候,不生效,我写APP的时候,没生效。用的时候,注意一下。)
style
格式化时使用的样式
“decimal”表示纯数字格式 , “currency”表示货币格式, 和"percent"表示百分比格式; 默认值是 “decimal”
currency
在货币格式化中使用的货币符号
“USD” 表示美元, “EUR” 表示欧元, "CNY"是人民币
没有默认值,如果样式是“currency”,必须提供货币属性. minimumFractionDigits
使用的小数位数的最小数目.可能的值是从0到20;默认为普通的数字和百分比格式为0;

//格式化金额(后面两位小数会四舍五入)
	moneyFormats(value){
		let a=Number(value);  //转为数字格式
		
		let b=a.toLocaleString('zh', { style: 'currency', currency: 'CNY' });
		
		return b
	},

在这里插入图片描述
二、适用所有场景,目前没发现问题。就是代码有点多。

 // 金额 格式化
    outputmoney(value) {  
      if (!value && value !== 0) return '-';
      var intPart = Number(value) | 0; //获取整数部分
      var intPartFormat = intPart.toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,'); //将整数部分逢三一断
  
      var floatPart = ".00"; //预定义小数部分
      var value2Array = value.toString().split(".");
  
      //=2表示数据有小数位
      if (value2Array.length == 2) {
          floatPart = value2Array[1].toString(); //拿到小数部分
  
          if (floatPart.length == 1) { //补0,实际上用不着
              return intPartFormat + "." + floatPart + '0';
          } else {
              return intPartFormat + "." + floatPart;
          }
      } else {
          return intPartFormat + floatPart;
      }
    },

三、自己以前写的,太麻烦了,可以不用。我当时根据需求写的。


	moneyFormat(number) {
	     number = String(number).replace(/\,/g, '')
	     if (isNaN(number) || number == '') return ''
	     number = Math.round(number * 100) / 100
	     if (number < 0)
	       return '-' + this.outputdollars(Math.floor(Math.abs(number) - 0) + '') + this.outputcents(Math.abs(number) - 0)
	     else return this.outputdollars(Math.floor(number - 0) + '') + this.outputcents(number - 0)
	},
   //格式化金额
   outputdollars(number) {
     if (number.length <= 3) return number == '' ? '0' : number
     else {
       var mod = number.length % 3
       var output = mod == 0 ? '' : number.substring(0, mod)
       for (var i = 0; i < Math.floor(number.length / 3); i++) {
         if (mod == 0 && i == 0) output += number.substring(mod + 3 * i, mod + 3 * i + 3)
         else output += ',' + number.substring(mod + 3 * i, mod + 3 * i + 3)
       }
       return output
     }
   },
   outputcents(amount) {
     amount = Math.round((amount - Math.floor(amount)) * 100)
     return amount < 10 ? '.0' + amount : '.' + amount
   },

总结:建议用方法一toLocaleString(),如果不行,可以用方法二。

Logo

基于 Vue 的企业级 UI 组件库和中后台系统解决方案,为数万开发者服务。

更多推荐