对金钱金额的处理–每三位间隔’,’,末尾保留两位小数
由于项目的原因,最近遇到在下单时需要对金额进行特殊处理,我的需求是:当折扣不足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,这个需要在使用时尽量避开,使得不进此方法。