Files
Snippets/js/floatAdd.ts
2024-06-06 10:04:28 +08:00

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