gaoluyang
19 小时以前 3ab45f295fb26c7794b4829976f3fb20c68a012e
src/utils/index.js
@@ -409,3 +409,41 @@
  return `${year}-${month}-${day}`;
}
/**
 * 截断(舍去)指定位数后不四舍五入
 * @param {number} num - 要处理的数字
 * @param {number} decimals - 要保留的小数位数,默认为0
 * @returns {number} 截断后的数字
 * @example
 * truncate(3.14159, 2) // 返回 3.14
 * truncate(3.999, 2) // 返回 3.99
 * truncate(-3.14159, 2) // 返回 -3.14
 * truncate(123.456, 0) // 返回 123
 */
export function truncate(num, decimals = 0) {
  // 参数验证
  if (typeof num !== 'number' || isNaN(num)) {
    console.warn('truncate: 第一个参数必须是有效数字');
    return num;
  }
  if (typeof decimals !== 'number' || decimals < 0 || !Number.isInteger(decimals)) {
    console.warn('truncate: 第二个参数必须是非负整数');
    return num;
  }
  // 如果保留0位小数,直接使用 Math.trunc
  if (decimals === 0) {
    return Math.trunc(num);
  }
  // 计算倍数(10的decimals次方)
  const multiplier = Math.pow(10, decimals);
  // 对于负数,使用 Math.ceil 来确保正确截断
  // 对于正数,使用 Math.floor 来截断
  if (num < 0) {
    return Math.ceil(num * multiplier) / multiplier;
  } else {
    return Math.floor(num * multiplier) / multiplier;
  }
}