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; };