【数值计算汇总】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
    }
}
相关推荐
希望永不加班2 分钟前
SpringBoot 静态资源访问(图片/JS/CSS)配置详解
java·javascript·css·spring boot·后端
ada0_ada112 分钟前
qt模块学习记录
开发语言·qt·学习
oh LAN18 分钟前
RuoYi-Vue-master:Spring Boot 4.x (JDK 17+) (环境搭建)
java·vue.js·spring boot
liulilittle19 分钟前
C++ 无锁编程:单停多发送场景高性能方案
服务器·开发语言·c++·高性能·无锁·原子
m0_7381207225 分钟前
渗透基础知识ctfshow——Web应用安全与防护(第一章)
服务器·前端·javascript·安全·web安全·网络安全
飞Link27 分钟前
大模型时代的“语言编程”:Prompt Engineering (提示词工程) 深度解析与实战指南
开发语言·python·prompt
持续前行34 分钟前
通过 npm 下载node_modules 某个依赖 ;例如 下载 @rollup/rollup-linux-arm64-gnu
前端·javascript·vue.js
无限进步_34 分钟前
【C++】巧用静态变量与构造函数:一种非常规的求和实现
开发语言·c++·git·算法·leetcode·github·visual studio
Advancer-37 分钟前
RedisTemplate 两种序列化实践方案
java·开发语言·redis
郝学胜-神的一滴1 小时前
Socket实战:从单端聊天到多用户连接的实现秘籍
服务器·开发语言·python·网络协议·pycharm