记录常用快捷运算

109 阅读1分钟

使用场景:uni-app(H5、小程序)、vue

基于decimal.js运算

以下均为本人在实际开发过程中使用频率较高的快捷运算函数,后续会继续补充

校验是否为数字
/**
 * 重写Number校验,仅允许[Number,String]类型通过
 * @param {*Any} data 需要校验的数字
 */
export function isNumber(data) {
	const type = Object.prototype.toString.call(data)
	return ['[object Number]', '[object String]'].includes(type) && !isNaN(data) && data !== ''
}
快速相加
/**
 * @param {*Any} data 需要相加的数据
 */
export function add(...args) {
	let res = 0
	args.forEach(item => {
		const value = isNumber(item) ? item : 0
		res = Decimal(res).add(Decimal(value)).toString()
	})
	return res
}
快速递减
/**
 * @param {*Any} data 需要递减的参数
 */
export function sub(...args) {
        // 第一个参数作为被减数
	let res = isNumber(args[0]) ? args[0] : 0
	const subtractArr = args.slice(1)
	subtractArr.forEach(item => {
		const value = isNumber(item) ? item : 0
		res = Decimal(res).sub(Decimal(value)).toString()
	})
	return res
}
快速相乘
/**
 * @param {*Any} data 需要相乘的数据
 */
export function mul(...args) {
        // 结果默认为1
	let res = 1
	args.forEach(item => {
                 // 乘数不能为0,不为数字则为1
		const value = isNumber(item) ? item : 1
		res = Decimal(res).mul(Decimal(value)).toString()
	})
	return res
}
快速递除
/**
 * @param {*Any} data 需要递除的数据
 */
export function div(...args) {
        // 第一个参数作为被除数
	let res = isNumber(args[0]) ? args[0] : 0
	const divisorArr = args.slice(1)
	divisorArr.forEach(item => {
                // 除数不能为0,不为数字则为1
		const value = isNumber(item) ? item : 1
		res = Decimal(res).div(Decimal(value)).toString()
	})
	return res
}
递除后转换为百分比 (保留2位小数)
/**
 * @param {*Any} data 需要相除的数据
 */
export function percent(...args) {
	const res = div(...args)
	return `${Decimal(res).mul(100).toFixed(2)}%`
}

在main.js中挂载即可全局使用

import * as fastDecimal from "./utils/fast_decimal.js" 
Vue.prototype.fdfs = fastDecimal

fdfs.isNumber('')         // false
fdfs.add(1, 4, 5)         // '10'
fdfs.sub(5 ,2 ,1)         // '2'
fdfs.mul(1, 3, 0)         // '0'
fdfs.div(9, 3, 0)         // '3'
fdfs.percent(20, 100)     // '20.00%'