【数值计算汇总】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
    }
}
相关推荐
wangan0944 分钟前
不带圆圈的二叉树
java·前端·javascript
狗哥哥4 分钟前
从零到一:打造企业级 Vue 3 高性能表格组件的设计哲学与实践
前端·vue.js·架构
疯狂平头哥7 分钟前
微信小程序真机预览-数字不等宽如何解决
前端
ku_code_ku7 分钟前
python bert_score使用本地模型的方法
开发语言·python·bert
Drift_Dream9 分钟前
前端趣味交互:如何精准判断鼠标从哪个方向进入元素?
前端
计算机毕设VX:Fegn08959 分钟前
计算机毕业设计|基于springboot + vue图书借阅管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
hqk11 分钟前
鸿蒙ArkUI:状态管理、应用结构、路由全解析
android·前端·harmonyos
小马哥编程13 分钟前
【软考架构】滑动窗口限流算法的原理是什么?
java·开发语言·架构
云栖梦泽20 分钟前
鸿蒙数据持久化实战:构建本地存储与云同步系统
开发语言·鸿蒙系统
米思特儿林21 分钟前
NuxtImage 配置上传目录配置
前端