28 lines
883 B
TypeScript
28 lines
883 B
TypeScript
import { isNumber } from "lodash-es";
|
|
|
|
/**
|
|
* 计算两个浮点数相加
|
|
* @param num1 数值1
|
|
* @param num2 数值2
|
|
* @returns 相加之和
|
|
* @description 使用两个数中小数点后位数较长的作为基数,抹平两个数的小数点,整数相加之后再除以基数,还原小数点。注意整体数值的位数不能超过最大整数范围
|
|
*/
|
|
export const floatAdd = (num1: number, num2: number) => {
|
|
if (!isNumber(num1) || !isNumber(num2)) return NaN;
|
|
let baseNum1: number;
|
|
let baseNum2: number;
|
|
try {
|
|
baseNum1 = num1.toString().split(".")[1].length;
|
|
} catch (e) {
|
|
baseNum1 = 0;
|
|
}
|
|
try {
|
|
baseNum2 = num2.toString().split(".")[1].length;
|
|
} catch (e) {
|
|
baseNum2 = 0;
|
|
}
|
|
const baseNum = Math.pow(10, Math.max(baseNum1, baseNum2));
|
|
const result = ((num1 * baseNum + num2 * baseNum) / baseNum).toFixed(2);
|
|
return +result;
|
|
};
|