【数值计算汇总】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
    }
}
相关推荐
Web小助手1 分钟前
js高级程序设计(1/2章节)
javascript
长路 ㅤ   11 分钟前
前端技术博客汇总文档
javascript·vue.js·css3·html5·前端技术
独立开阀者_FwtCoder24 分钟前
放弃 JSON.parse(JSON.stringify()) 吧!试试现代深拷贝!
前端·javascript·github
尘世闲鱼1 小时前
解数独(C++版本)
开发语言·c++·算法·解数独
张晓~183399481211 小时前
数字人源码部署流程分享--- PC+小程序融合方案
javascript·小程序·矩阵·aigc·文心一言·html5
爱喝水的小周2 小时前
AJAX vs axios vs fetch
前端·javascript·ajax
Jinxiansen02112 小时前
unplugin-vue-components 最佳实践手册
前端·javascript·vue.js
几道之旅2 小时前
介绍electron
前端·javascript·electron
周胡杰2 小时前
鸿蒙arkts使用关系型数据库,使用DB Browser for SQLite连接和查看数据库数据?使用TaskPool进行频繁数据库操作
前端·数据库·华为·harmonyos·鸿蒙·鸿蒙系统
31535669132 小时前
ClipReader:一个剪贴板英语单词阅读器
前端·后端