/**
* 将科学计数法的数字转为字符串
* 说明:运算精度丢失方法中处理数字的时候,如果出现科学计数法,就会导致结果出错
* 4.496794759834739e-9 ==> 0.000000004496794759834739
* 4.496794759834739e+9 ==> 4496794759.834739
* @param num
*/
var toNonExponential = (num)=> {
if(num == null) {
return num;
}
if(typeof num == "number") {
var m = num.toExponential().match(/\d(?:\.(\d*))?e([+-]\d+)/);
return num.toFixed(Math.max(0, (m[1] || '').length - m[2]));
}else {
return num;
}
}
/**
* 乘法 - js运算精度丢失问题
* @param arg1 数1
* @param arg2 数2
* 0.0023 * 100 ==> 0.22999999999999998
* {
{ 0.0023 | multiply(100) }} ==> 0.23
*/
var floatMultiply = (arg1, arg2) => {
arg1 = Number(arg1);
arg2 = Number(arg2);
if ((!arg1 && arg1!==0) || (!arg2 && arg2!==0)) {
return null;
}
arg1 = toNonExponential(arg1);
arg2 = toNonExponential(arg2);
var n1, n2;
var r1, r2; // 小数位数
try