【数值计算汇总】js前端数值计算校验转换

前言

这个合集功能主要是为了处理前端计算数据

因为我的项目有很多表格公式计算是前端写的

所以有一个很麻烦的事情就是加减乘除的时候因为各种情况导致报错

最常见的就是后端传的值不规范

有时候这个字段没有值的时候给我返回的是数字0,有时候字符串数字0,有时候null,有时候 ' ' 等等之类的不确定情况

所以我就写了几个方法统一把后端的数据丢里面直接校验转换,凡是没有值的统一都转0这样计算不会报错。

数字转换:传入一个参数,给你转成数字返回,如果传入的转不了数字就返回0

javascript 复制代码
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位

javascript 复制代码
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
            },

加法

javascript 复制代码
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
    }
}

减法

javascript 复制代码
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
    }
}

乘法

javascript 复制代码
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过来

javascript 复制代码
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
    }
}
相关推荐
你的不安3 分钟前
C#中 管理NuGet程序包
开发语言·c#·wpf
R-sz7 分钟前
UE5.4 打包报错 error C4668 C4067
java·前端·ue5
zhengxianyi5158 分钟前
ruo-vue-pro 启用任务调度模块并新增一个job
java·vue.js·spring boot
Nuopiane9 分钟前
Pal3.Unity开源项目复刻(八)其余
java·服务器·前端
我是唐青枫12 分钟前
C#.NET SignalR 深入解析:实时通信、Hub 与连接管理实战
开发语言·c#·.net
炸膛坦客15 分钟前
单片机/C语言八股:(四)volatile 和 static 关键字的作用
c语言·开发语言
sycmancia16 分钟前
C++——对象模型分析
开发语言·c++
云泽80817 分钟前
C++ STL set 容器全解析:从基础用法、算法实践到云同步实战
开发语言·c++·算法
山上三树17 分钟前
C++ 智能指针详解与代码示例
开发语言·c++
无知的小菜鸡22 分钟前
React 零散知识记录
前端·react.js·前端框架