前言
这个合集功能主要是为了处理前端计算数据
因为我的项目有很多表格公式计算是前端写的
所以有一个很麻烦的事情就是加减乘除的时候因为各种情况导致报错
最常见的就是后端传的值不规范
有时候这个字段没有值的时候给我返回的是数字0,有时候字符串数字0,有时候null,有时候 ’ ’ 等等之类的不确定情况
所以我就写了几个方法统一把后端的数据丢里面直接校验转换,凡是没有值的统一都转0这样计算不会报错。
数字转换:传入一个参数,给你转成数字返回,如果传入的转不了数字就返回0
numFormatting(a, f = 2) {
if ((!isNaN(parseFloat(a)) && isFinite(a))) {
let num1 = parseFloat(a)
if (num1 !== 0 ) {
return Number((num1).toFixed(f))
} else {
return 0
}
} else {
return 0
}
},
小数点保留两位:对象统一处理计算后小数点保留两位
参数1:传入要转的对象。
参数2:数组,数组中的字段不处理。格式:[‘doctor’,‘name’,‘title’]
参数3:保留小数点后位数,默认2位
formatObj(obj, arr, f = 2) {
let keyList = Object.keys(obj)
keyList.forEach(key => {
if (arr.indexOf(key) == -1) {
if (obj[key].toString().indexOf('%') !== -1) {
let num = obj[key].slice(0, -1)
obj[key] = parseFloat(num) == 0 ? '0%' : parseFloat(num).toFixed(f) + '%'
} else {
obj[key] = parseFloat(obj[key]) == 0 ? 0 : parseFloat(obj[key]).toFixed(f)
}
}
})
return obj
},
加法
function addition(a, b, f = 2) {
if ((!isNaN(parseFloat(a)) && isFinite(a)) && (!isNaN(parseFloat(b)) && isFinite(b))) {
let num1 = parseFloat(a)
let num2 = parseFloat(b)
return (num1 + num2)==0?0:(num1 + num2).toFixed(f)
} else {
return 0
}
}
减法
function subtraction(a, b, f = 2) {
if ((!isNaN(parseFloat(a)) && isFinite(a)) && (!isNaN(parseFloat(b)) && isFinite(b))) {
let num1 = parseFloat(a)
let num2 = parseFloat(b)
return (num1 - num2).toFixed(f)
} else {
return 0
}
}
乘法
function multiplication(a, b, f = 2){
if ((!isNaN(parseFloat(a)) && isFinite(a)) && (!isNaN(parseFloat(b)) && isFinite(b))) {
let num1 = parseFloat(a)
let num2 = parseFloat(b)
if (num1 !== 0 && num2 !== 0) {
return (num1 * num2).toFixed(f)
} else {
return 0
}
} else {
return 0
}
}
除法:传入两个参数相除,第三个参数是小数点后留几位,传入的参数有问题会返回0,第四个参数是乘的倍数,默认乘100,不乘可以传1过来
function divisions(a, b, f = 2,multiple=100) {
if ((!isNaN(parseFloat(a)) && isFinite(a)) && (!isNaN(parseFloat(b)) && isFinite(b))) {
let num1 = parseFloat(a)
let num2 = parseFloat(b)
if (num1 !== 0 && num2 !== 0) {
return ((num1 / num2) * multiple).toFixed(f)
} else {
return 0
}
} else {
return 0
}
}
数字格式化
// 数字格式化
isInteger(obj,num=2) {
// 如果是数字并且为整数返回数字,如果有小数自定义小数保留几位。如果不是数字格式错误或者值就等于0统一返0
if ((!isNaN(parseFloat(obj)) && isFinite(obj))) {
let num1 = parseFloat(obj)
if (num1 !== 0 ) {
if(obj%1 === 0){
return obj
}else{
return Number((num1).toFixed(num))
}
} else {
return 0
}
} else {
return 0
}
},