使用js写一个方法将数字转换为float,并取N位小数

/**
 * 将数字转换为浮点数,并保留指定位数的小数。
 *
 * @param {number} num 要转换的数字。
 * @param {number} precision 要保留的小数位数。
 * @param {string} [method='round']  舍入方法,可选值为 'round'(四舍五入,默认)、'floor'(向下取整)、'ceil'(向上取整)。
 * @returns {number} 转换后的浮点数。如果输入无效,则返回 NaN。
 */
function toFixedFloat(num, precision, method = 'round') {
  if (typeof num !== 'number' || isNaN(num) || typeof precision !== 'number' || isNaN(precision) || precision < 0) {
    return NaN;
  }

  const multiplier = Math.pow(10, precision);

  switch (method) {
    case 'round':
      return Math.round(num * multiplier) / multiplier;
    case 'floor':
      return Math.floor(num * multiplier) / multiplier;
    case 'ceil':
      return Math.ceil(num * multiplier) / multiplier;
    default:
      return Math.round(num * multiplier) / multiplier; // 默认四舍五入
  }
}


// 示例用法:
console.log(toFixedFloat(1.234567, 2)); // 输出:1.23
console.log(toFixedFloat(1.234567, 3)); // 输出:1.235
console.log(toFixedFloat(1.234567, 0)); // 输出:1
console.log(toFixedFloat(1.5, 0));     // 输出:2
console.log(toFixedFloat(1.234567, 2, 'floor')); // 输出:1.23
console.log(toFixedFloat(1.234567, 2, 'ceil'));  // 输出:1.24
console.log(toFixedFloat("abc", 2));  // 输出:NaN
console.log(toFixedFloat(1.234, -1)); // 输出:NaN
console.log(toFixedFloat(NaN, 2)); // 输出:NaN


这个改进版本添加了以下功能:

  • 错误处理: 如果输入 numprecision 不是数字,或者 precision 为负数,则返回 NaN。这可以防止意外行为并使函数更健壮。
  • 舍入方法参数: 允许用户指定舍入方法(roundfloorceil)。这提供了更大的灵活性。
  • 更清晰的注释: 添加了 JSDoc 样式的注释,以更好地解释函数的参数和返回值。

这个函数比简单的 toFixed() 方法更强大,因为它可以处理各种舍入方法,并且对无效输入更具弹性。toFixed() 方法的主要问题是它返回一个字符串而不是数字,并且在处理舍入方面不如这个函数灵活。 而且toFixed()在不同浏览器下的精度处理也可能存在细微差异。

希望这个改进的版本对您更有帮助!

posted @ 2024-12-12 06:16  王铁柱6  阅读(75)  评论(0)    收藏  举报