对金钱金额的处理--每三位间隔‘,‘,末尾保留两位小数

对金钱金额的处理–每三位间隔’,’,末尾保留两位小数

由于项目的原因,最近遇到在下单时需要对金额进行特殊处理,我的需求是:当折扣不足0.01元时,不计入折扣。也就是这部分由客户自行承担。

朋友给我分享了他们公司的coding,虽不满足我的需求,但是对金额的处理是每隔三位一个,,末尾保留两位小数,先mark一下:

1 放在watch

housePrice (newVal) {
  newVal = newVal.substring(0, 18)
  let temp = []
  temp = newVal.split('.')
  if (temp.length === 1 && temp[0] === '') {
    this.housePrice = ''
  } else if (temp.length === 1 && temp[0] !== '' && temp[0].length > 1) {
    if (temp[0].slice(0, 1) === '0') {
      let l = temp[0].length
      temp[0] = temp[0].slice(1, l)
    }
    this.housePrice = temp.join('.')
  } else if (temp.length === 2 && temp[0] === '') {
    temp[0] = '0'
    this.housePrice = temp.join('.')
  } else if (temp.length === 2 && temp[1].length > 2) {
    temp[1] = temp[1].slice(0, 2)
    this.housePrice = temp.join('.')
  }
  return this.housePrice
},

2.对数据进行除100操作后再处理

Vue.filter('filterMoneyDiv100', (value) => {
  if (value === 0 || value === '0') {
    return '0.00'
  } else if (value === '') {
    return ''
  } else if (value && value !== 0) {
    value = value / 100
    value = value.toString()
    let reg = /^(([1-9][0-9]*)|(([0]\.\d{1,2}|[1-9][0-9]*\.\d{1,2})))$/
    if (reg.test(value)) {
      let n = !isFinite(+value) ? 0 : parseFloat(value)
      let prec = 2
      let sep = ','
      let dec = '.'
      let s = ''
      let toFixedFix = function (n, prec) {
        let k = Math.pow(10, prec)
        return '' + Math.round(n * k) / k
      }
      s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.')
      var re = /(-?\d+)(\d{3})/
      while (re.test(s[0])) {
        s[0] = s[0].replace(re, '$1' + sep + '$2')
      }
      if ((s[1] || '').length < prec) {
        s[1] = s[1] || ''
        s[1] += new Array(prec - s[1].length + 1).join('0')
      }
      return s.join(dec)
    } else {
      return value
      }
  }
})

3.对数据进行乘以100 后再操作

Vue.filter('filterMoney', (value) => {
  if (value && value !== 0) {
    value = value.toString()
    let reg = /^(([1-9][0-9]*)|(([0]\.\d{1,2}|[1-9][0-9]*\.\d{1,2})))$/
    if (reg.test(value)) {
      let n = !isFinite(+value) ? 0 : parseFloat(value)
      let prec = 2
      let sep = ','
      let dec = '.'
      let s = ''
      let toFixedFix = function (n, prec) {
        let k = Math.pow(10, prec)
        return '' + Math.round(n * k) / k
      }
      s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.')
      var re = /(-?\d+)(\d{3})/
      while (re.test(s[0])) {
        s[0] = s[0].replace(re, '$1' + sep + '$2')
      }
      if ((s[1] || '').length < prec) {
        s[1] = s[1] || ''
        s[1] += new Array(prec - s[1].length + 1).join('0')
      }
      return s.join(dec)
    } else {
      return value
    }
  } else if (value === 0) {
    return '0.00'
  }
})

4.若小数的第三位数直接舍弃,而不是进行四舍五入,则使用以下方法

moneyVal (val) {
	if (val && val != 0) {
		val = Math.floor(val * 100) / 100
		return val.toFixed(2) // 最后使用toFixed修饰下
	} else {
		return '0.00'
	}
}

注意:
该方法在val 值为2.01时,输出是2.00,这个需要在使用时尽量避开,使得不进此方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值