getNumberResult中有两个参数,第一个参数是原始数据(可以是number、string),第二个参数是小数点后位数(默认为2);以下提供两种写法:
1、ES6以上可用:
const getNumberResult = (num, decimal = 2) => {
if (!num) return '';
num = num[num.length - 1] === '.' && num.match(/\./g).length === 1 ? num : parseFloat(num) //isNaN(parseFloat(num)) ? '' : parseFloat(num).toString();
// num = typeof num != 'String' ? num.toString() : num;
if(isNaN(num)) return'';
num = num.toString();
// 初次阻止0-9及.以外的字符
if (!/^[0-9,.]*$/.test(num)) return num.slice(0, -1)
const reg = /^(([1-9][0-9]*\.[0-9][0-9]?)|([0]\.[0-9][0-9]?)|([1-9][0-9]*)|([0]{1}))$/;
if (!reg.test(num) && num.match(/\./g).length > 1) {
num = num.slice(0, -1)
} else if (num.includes('.') && num.match(/\./g).length > 1) {
num = num.slice(0, -1)
} else if (num.includes('.') && !parseInt(decimal)) {
num = num.slice(0, -1)
} else if (num.includes('.') && num.split('.')[1].length > decimal) {
num = num.slice(0, -1)
}
if (num.includes('.')) {
const index = num.indexOf('.');
const len = num.length;
return len - 1 - index > decimal ? num.slice(0, index + decimal + 1) : num
} else {
return num;
}
}
2、ES5写法:
function getNumberResult(num, decimal = 2) {
if (!num) return '';
num = num[num.length - 1] === '.' && num.match(/\./g).length === 1 ? num : parseFloat(num) //isNaN(parseFloat(num)) ? '' : parseFloat(num).toString();
// num = typeof num != 'String' ? num.toString() : num;
if(isNaN(num)) return'';
num = num.toString();
// 初次阻止0-9及.以外的字符
if (!/^[0-9,.]*$/.test(num)) return num.slice(0, -1)
const reg = /^(([1-9][0-9]*\.[0-9][0-9]?)|([0]\.[0-9][0-9]?)|([1-9][0-9]*)|([0]{1}))$/;
if (!reg.test(num) && num.match(/\./g).length > 1) {
num = num.slice(0, -1)
} else if (num.includes('.') && num.match(/\./g).length > 1) {
num = num.slice(0, -1)
} else if (num.includes('.') && !parseInt(decimal)) {
num = num.slice(0, -1)
} else if (num.includes('.') && num.split('.')[1].length > decimal) {
num = num.slice(0, -1)
}
if (num.includes('.')) {
var index = num.indexOf('.');
var len = num.length;
return len - 1 - index > decimal ? num.slice(0, index + decimal + 1) : num
} else {
return num;
}
}
可以实时修改其值,以下用vue中的写法举例:
1、模板中写法:
<el-input v-model="FormData.payAmount" size='mini' @input="changePrice('payAmount')" clearable >
<template slot="prepend">CNY</template>
</el-input>
2、js中写法:
data:() => ({
FormData:{payAmount: 0}
}),
methods: {
changePrice(key) {
this.FormData[key] = getNumberResult(this.FormData[key], 2);
},
}
欢迎留言交流,QQ:1960816818