使用场景: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%'