【数值计算汇总】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
    }
}
相关推荐
lsx2024066 分钟前
CSS 图片廊
开发语言
coderxiaohan6 分钟前
【C++】C++11
开发语言·c++
雾岛听蓝7 分钟前
C++优选算法 | 双指针篇(一)
开发语言·c++
byzh_rc8 分钟前
[微机原理与系统设计-从入门到入土] 微型计算机基础
开发语言·javascript·ecmascript
m0_471199638 分钟前
【小程序】订单数据缓存 以及针对海量库存数据的 懒加载+数据分片 的具体实现方式
前端·vue.js·小程序
编程大师哥9 分钟前
Java web
java·开发语言·前端
A小码哥10 分钟前
Vibe Coding 提示词优化的四个实战策略
前端
书中藏着宇宙11 分钟前
CornerNet的续篇(数据处理与训练)
开发语言·python
Murrays11 分钟前
【React】01 初识 React
前端·javascript·react.js
大喜xi14 分钟前
ReactNative 使用百分比宽度时,aspectRatio 在某些情况下无法正确推断出高度,导致图片高度为 0,从而无法显示
前端