問題描述: 要求是文字框輸入的時候,可以自動識別千分位,使用iview的InputNumber 數字輸入框可以實現這個效果,文中附js轉化千分位的方法
(1), render渲染InputNumber
1, 官方示例
2, 實現效果
3, 處理程式碼 MoneyFormList: any = {
columns: [
{
title: '收款金額',
key: 'AmountMoney',
render: (h, params) => {
return h('div', [
h('InputNumber', {
style: {
width: '120px'
},
props: {
value: params.row.AmountMoney,
formatter: value => `${value}`.replace(/\B(?=(\d{3})+(?!\d))/g, ','),
parser: value => `${value}`.replace(/$s?|(,*)/g, '')
// 也可以寫成如下形式: `${value}`或者value.toString()
// formatter: function (value) {
// return value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',')
// },
// parser: function (value) {
// return value.toString().replace(/$s?|(,*)/g, '')
// }
},
on: {
'on-change': e => {
console.log(e)
}
}
})
])
}
}
]
}
複製程式碼
備註: 本來是直接複製的iview api上面的程式碼,結果怎麼都不生效,開始還以為是方法寫錯了,最後仔細看了看,才知道哪裡寫錯了,下面對比兩行程式碼,找出區別,寫程式碼要認真啊
-
replace(/B(?=(d{3})+(?!d))/g, ',')
-
replace(/\B(?=(\d{3})+(?!\d))/g, ',')
(2), 附js轉化千分位函式
1, 方法一
shiftNumber (num) {
return num && num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',')
}
複製程式碼
- 備註: 這個方法會有點問題,具體執行列印結果如下,問題就是小數點也會被加逗號
console.log(this.shiftNumber(1111111111111.9999999999)) // 1,111,111,111,112
console.log(this.shiftNumber(1111111111111.99111111111)) // 1,111,111,111,111.9,912
console.log(this.shiftNumber(1111111111111.99)) // 1,111,111,111,111.99
console.log(this.shiftNumber(1111111111111.2222222222222)) // 1,111,111,111,111.2,222
console.log(this.shiftNumber(1111111111111.10000000)) // 1,111,111,111,111.1
console.log(this.shiftNumber(1111111111111.00)) // 1,111,111,111,111
複製程式碼
2, 方法二
commafy (num) {
return num && num.toString().replace(/(\d)(?=(\d{3})+\.)/g, function ($1, $2) {
return $2 + ','
})
}
複製程式碼
執行結果列印如下,這個小數點不會被新增逗號
console.log(this.commafy(1111111111111.9999999999)) // 1,111,111,111,112
console.log(this.commafy(1111111111111.99111111111)) // 1,111,111,111,111.9912
console.log(this.commafy(1111111111111.99)) // 1,111,111,111,111.99
console.log(this.commafy(1111111111111.2222222222222)) // 1,111,111,111,111.2222
console.log(this.commafy(1111111111111.10000000)) // 1,111,111,111,111.1
console.log(this.commafy(1111111111111.00)) // 1,111,111,111,111
複製程式碼
-
如有問題,歡迎指正
-
本文為原創,如需轉載,請註明出處: iview 使用render渲染InputNumber,格式化數字