math/plus.js

import { digitLength } from '../utils/math.util';
import times from './times';

/**
 * 精确加法,支持多个数相加
 * 
 * @static
 * @alias module:Math.plus
 * @since 3.1.0
 * @param {Number} num1 相加的第一个数
 * @param {Number} num2 相加的第二个数
 * @param {Number} [others] 相加的其余数
 * @returns {Number} 总和
 * @example
 * 
 *  plus(0.1, 0.2);
 *  // => 0.3
 * 
 *  plus(0.1, 0.2, 0.3);
 *  // => 0.6
 * 
 *  plus(0.1, 0.2, 0.3, 0.4);
 *  // => 1
 */
function plus(num1, num2, ...others) {
  if (others.length > 0) {
    return plus(plus(num1, num2), ...others);
  }
  const baseNum = Math.pow(10, Math.max(digitLength(num1), digitLength(num2)));
  return (times(num1, baseNum) + times(num2, baseNum)) / baseNum;
}

export default plus;