xms-basic-util
Version:
js基础工具类集合,集成方便后期调用,通过webpack编译,支持多种平台,如es6、node、浏览器引入等 ## 使用 ### es6方法 - 安装 ``` npm install xms-basic-util ``` - 导入 ``` import xmsBasicUtil from 'xms-basic-util' //日期转换工具对象 const dateFormat = xmsBasicUtil.dateFormat; //数字处理工具对象 const mathUtil = xmsBasicUt
154 lines (139 loc) • 3.9 kB
JavaScript
/**
* 乘法
* @param arg1
* @param arg2
* @param decimals 保留小数的位数
* @returns {number|*}
*/
function accMul(arg1, arg2, decimals) {
let m = 0, s1 = arg1.toString(), s2 = arg2.toString();
try {
m += s1.split(".")[1].length;
} catch (e) {
}
try {
m += s2.split(".")[1].length;
} catch (e) {
}
let num = Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m);
return decimalsFormat(num, decimals);
}
/**
* 除法
* @param arg1
* @param arg2
* @param decimals 保留小数的位数
* @returns {number|*}
*/
function accDiv(arg1, arg2, decimals) {
let t1 = 0, t2 = 0, r1, r2;
try {
t1 = arg1.toString().split(".")[1].length;
} catch (e) {
}
try {
t2 = arg2.toString().split(".")[1].length;
} catch (e) {
}
r1 = Number(arg1.toString().replace(".", ""));
r2 = Number(arg2.toString().replace(".", ""));
let num = Number((r1 / r2) * Math.pow(10, t2 - t1));
return decimalsFormat(num, decimals);
}
//保留小数位
function decimalsFormat(num, decimals) {
if (decimals != undefined && decimals >= 0) {
num = Math.round(num * Math.pow(10, decimals)) / Math.pow(10, decimals);
}
return num;
}
/**
* 加法
* @param arg1
* @param arg2
* @returns {number|*}
*/
function accAdd(arg1, arg2) {
var r1, r2, m;
try {
r1 = arg1.toString().split(".")[1].length;
} catch (e) {
r1 = 0;
}
try {
r2 = arg2.toString().split(".")[1].length;
} catch (e) {
r2 = 0;
}
m = Math.pow(10, Math.max(r1, r2));
return accDiv((accMul(arg1, m) + accMul(arg2, m)) , m, 2);
}
/**
* 减法
* @param arg1
* @param arg2
* @returns {number|*}
*/
function accSub(arg1, arg2) {
var r1, r2, m;
try {
r1 = arg1.toString().split(".")[1].length;
} catch (e) {
r1 = 0;
}
try {
r2 = arg2.toString().split(".")[1].length;
} catch (e) {
r2 = 0;
}
m = Math.pow(10, Math.max(r1, r2));
return accDiv((arg1 * m - arg2 * m) , m, 2);
}
/**
* Number 四舍五入为指定小数位数的数字
*/
function toFixed(num, length){
let times = Math.pow(10, length);
let des = accMul(num, times) + 0.5
des = parseInt(des, 10) / times
return des
}
/**
* 将二进制小数部分转换为十进制数
* @param binaryFloatPartArr 二进制小数部分中由小数各位组成的数组
* @param radix binaryNum对应的进制数,默认为2,如果binaryNum是8进制,则需要传8,其他进制类似
*/
function eachBinaryFloatPartToDecimal(binaryFloatPartArr, radix) {
return binaryFloatPartArr.map((currentValue, index) => {
return Number(currentValue) * Math.pow(radix, (-(index + 1)))
})
}
/**
* 将二进制小数(包含整数部分和小数部分)转换为十进制数
* @param binaryNum 进制数(可能是整数,也可能是小数,默认是二进制)
* @param radix binaryNum对应的进制数,默认为2,如果binaryNum是8进制,则需要传8,其他进制类似
*/
function binaryFloatToDecimal(binaryNum, radix) {
radix = radix || 2
// 如果该二进制只有整数部分则直接用 parseInt(string, radix) 处理
if (Number.isInteger(binaryNum)) {
return parseInt(binaryNum, radix)
}
const binaryFloatNumArr = binaryNum.toString().split(".")
// 将二进制整数转换为十进制数
const binaryIntParStr = binaryFloatNumArr[0]
const decimalIntPartNum = parseInt(binaryIntParStr, radix)
// 将二进制小数部分转换为十进制数
const binaryFloatPartArr = binaryFloatNumArr[1].split("")
const eachDecimalFloatPartNum = eachBinaryFloatPartToDecimal(binaryFloatPartArr, radix)
const deciamlFloatPartNum = eachDecimalFloatPartNum.reduce((accumulator, currentValue) => { return accumulator + currentValue }, 0)
return decimalIntPartNum + deciamlFloatPartNum
}
export default {
accMul, //乘法
accDiv, //除法
accAdd, //加法
accSub, //减法
toFixed, //四舍五入指定小数位
binaryFloatToDecimal //进制转换,主要是二进制转换成十进制
}