math/minus.js

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

/**
 * 精确减法,支持多个数相减
 * 
 * @static
 * @alias module:Math.minus
 * @since 3.1.0
 * @param {Number} num1 相减的第一个数
 * @param {Number} num2 相减的第二个数
 * @param {Number} [others] 相减的第其余数
 * @returns {Number} 差
 * @example
 * 
 *  minus(1, 0.9);
 *  // => 0.1
 * 
 *  minus(1, 0.9, 0.02);
 *  // => 0.08
 * 
 *  minus(1, 0.9, 0.02, 0.08);
 *  // => 0
 */
function minus(num1, num2, ...others) {
  if (others.length > 0) {
    return minus(minus(num1, num2), ...others);
  }
  const baseNum = Math.pow(10, Math.max(digitLength(num1), digitLength(num2)));
  return (times(num1, baseNum) - times(num2, baseNum)) / baseNum;
}

export default minus;