鸿蒙NEXT开发数值工具类(TS)

复制代码
/**
 * 数值工具类
 *
 * 提供一组静态方法,用于处理和操作数值类型的数据。
 * 包括数值判断、字符串转换、格式化、范围校验等功能。
 *
 * @author CSDN-鸿蒙布道师
 * @since 2025/04/03
 */
export class NumberUtil {

  /**
   * 判断是否是数值
   *
   * 检查给定值是否为有效的 JavaScript 数值(非 NaN)。
   *
   * @param value 需要判断的参数
   * @returns 如果是有效数值,则返回 true;否则返回 false
   */
  static isNumber(value: any): boolean {
    return typeof value === "number" && !isNaN(value);
  }

  /**
   * 将字符串转换为整数。
   *
   * 如果无法转换为整数,则返回默认值。
   *
   * @param value 要转换的字符串
   * @param defaultValue 转换失败时的默认值,默认为 0
   * @returns 转换后的整数值或默认值
   */
  static toInt(value: string, defaultValue: number = 0): number {
    try {
      const parsedValue = parseInt(value, 10); // 明确指定基数为 10
      return isNaN(parsedValue) ? defaultValue : parsedValue;
    } catch (e) {
      return defaultValue;
    }
  }

  /**
   * 将字符串转换为浮点数。
   *
   * 如果无法转换为浮点数,则返回默认值。
   *
   * @param value 要转换的字符串
   * @param defaultValue 转换失败时的默认值,默认为 0
   * @returns 转换后的浮点数值或默认值
   */
  static toFloat(value: string, defaultValue: number = 0): number {
    try {
      const parsedValue = parseFloat(value);
      return isNaN(parsedValue) ? defaultValue : parsedValue;
    } catch (e) {
      return defaultValue;
    }
  }

  /**
   * 格式化数字为固定小数位数。
   *
   * 如果数字超出范围,会自动截断到指定的小数位。
   *
   * @param value 要格式化的数字
   * @param digits 小数位数,默认为 2
   * @returns 格式化后的数字字符串
   */
  static formatFixed(value: number, digits: number = 2): string {
    if (!this.isNumber(value)) {
      throw new Error("Invalid number provided.");
    }
    return value.toFixed(digits);
  }

  /**
   * 校验数字是否在指定范围内。
   *
   * @param value 要校验的数字
   * @param min 最小值
   * @param max 最大值
   * @returns 如果数字在范围内,则返回 true;否则返回 false
   */
  static isInRange(value: number, min: number, max: number): boolean {
    if (!this.isNumber(value) || !this.isNumber(min) || !this.isNumber(max)) {
      throw new Error("All arguments must be valid numbers.");
    }
    return value >= min && value <= max;
  }

  /**
   * 将数字限制在指定范围内。
   *
   * 如果数字小于最小值,则返回最小值;如果大于最大值,则返回最大值。
   *
   * @param value 要限制的数字
   * @param min 最小值
   * @param max 最大值
   * @returns 限制后的数字
   */
  static clamp(value: number, min: number, max: number): number {
    if (!this.isNumber(value) || !this.isNumber(min) || !this.isNumber(max)) {
      throw new Error("All arguments must be valid numbers.");
    }
    return Math.min(Math.max(value, min), max);
  }

  /**
   * 计算两个数字之间的随机数。
   *
   * @param min 最小值(包含)
   * @param max 最大值(包含)
   * @returns 随机生成的数字
   */
  static randomInRange(min: number, max: number): number {
    if (!this.isNumber(min) || !this.isNumber(max)) {
      throw new Error("Both min and max must be valid numbers.");
    }
    return Math.floor(Math.random() * (max - min + 1)) + min;
  }

  /**
   * 将数字四舍五入到指定的小数位。
   *
   * @param value 要四舍五入的数字
   * @param digits 小数位数,默认为 0
   * @returns 四舍五入后的数字
   */
  static roundTo(value: number, digits: number = 0): number {
    if (!this.isNumber(value) || !this.isNumber(digits)) {
      throw new Error("Both value and digits must be valid numbers.");
    }
    const factor = Math.pow(10, digits);
    return Math.round(value * factor) / factor;
  }

  /**
   * 将数字向上取整到指定的小数位。
   *
   * @param value 要向上取整的数字
   * @param digits 小数位数,默认为 0
   * @returns 向上取整后的数字
   */
  static ceilTo(value: number, digits: number = 0): number {
    if (!this.isNumber(value) || !this.isNumber(digits)) {
      throw new Error("Both value and digits must be valid numbers.");
    }
    const factor = Math.pow(10, digits);
    return Math.ceil(value * factor) / factor;
  }

  /**
   * 将数字向下取整到指定的小数位。
   *
   * @param value 要向下取整的数字
   * @param digits 小数位数,默认为 0
   * @returns 向下取整后的数字
   */
  static floorTo(value: number, digits: number = 0): number {
    if (!this.isNumber(value) || !this.isNumber(digits)) {
      throw new Error("Both value and digits must be valid numbers.");
    }
    const factor = Math.pow(10, digits);
    return Math.floor(value * factor) / factor;
  }

  /**
   * 格式化数字为千分位表示法。
   *
   * @param value 要格式化的数字
   * @returns 格式化后的数字字符串
   */
  static formatThousands(value: number): string {
    if (!this.isNumber(value)) {
      throw new Error("Invalid number provided.");
    }
    return value.toLocaleString('en-US');
  }
}

代码如下:
TypeScript 复制代码
/**
 * 数值工具类
 *
 * 提供一组静态方法,用于处理和操作数值类型的数据。
 * 包括数值判断、字符串转换、格式化、范围校验等功能。
 *
 * @author CSDN-鸿蒙布道师
 * @since 2025/04/03
 */
export class NumberUtil {

  /**
   * 判断是否是数值
   *
   * 检查给定值是否为有效的 JavaScript 数值(非 NaN)。
   *
   * @param value 需要判断的参数
   * @returns 如果是有效数值,则返回 true;否则返回 false
   */
  static isNumber(value: any): boolean {
    return typeof value === "number" && !isNaN(value);
  }

  /**
   * 将字符串转换为整数。
   *
   * 如果无法转换为整数,则返回默认值。
   *
   * @param value 要转换的字符串
   * @param defaultValue 转换失败时的默认值,默认为 0
   * @returns 转换后的整数值或默认值
   */
  static toInt(value: string, defaultValue: number = 0): number {
    try {
      const parsedValue = parseInt(value, 10); // 明确指定基数为 10
      return isNaN(parsedValue) ? defaultValue : parsedValue;
    } catch (e) {
      return defaultValue;
    }
  }

  /**
   * 将字符串转换为浮点数。
   *
   * 如果无法转换为浮点数,则返回默认值。
   *
   * @param value 要转换的字符串
   * @param defaultValue 转换失败时的默认值,默认为 0
   * @returns 转换后的浮点数值或默认值
   */
  static toFloat(value: string, defaultValue: number = 0): number {
    try {
      const parsedValue = parseFloat(value);
      return isNaN(parsedValue) ? defaultValue : parsedValue;
    } catch (e) {
      return defaultValue;
    }
  }

  /**
   * 格式化数字为固定小数位数。
   *
   * 如果数字超出范围,会自动截断到指定的小数位。
   *
   * @param value 要格式化的数字
   * @param digits 小数位数,默认为 2
   * @returns 格式化后的数字字符串
   */
  static formatFixed(value: number, digits: number = 2): string {
    if (!this.isNumber(value)) {
      throw new Error("Invalid number provided.");
    }
    return value.toFixed(digits);
  }

  /**
   * 校验数字是否在指定范围内。
   *
   * @param value 要校验的数字
   * @param min 最小值
   * @param max 最大值
   * @returns 如果数字在范围内,则返回 true;否则返回 false
   */
  static isInRange(value: number, min: number, max: number): boolean {
    if (!this.isNumber(value) || !this.isNumber(min) || !this.isNumber(max)) {
      throw new Error("All arguments must be valid numbers.");
    }
    return value >= min && value <= max;
  }

  /**
   * 将数字限制在指定范围内。
   *
   * 如果数字小于最小值,则返回最小值;如果大于最大值,则返回最大值。
   *
   * @param value 要限制的数字
   * @param min 最小值
   * @param max 最大值
   * @returns 限制后的数字
   */
  static clamp(value: number, min: number, max: number): number {
    if (!this.isNumber(value) || !this.isNumber(min) || !this.isNumber(max)) {
      throw new Error("All arguments must be valid numbers.");
    }
    return Math.min(Math.max(value, min), max);
  }

  /**
   * 计算两个数字之间的随机数。
   *
   * @param min 最小值(包含)
   * @param max 最大值(包含)
   * @returns 随机生成的数字
   */
  static randomInRange(min: number, max: number): number {
    if (!this.isNumber(min) || !this.isNumber(max)) {
      throw new Error("Both min and max must be valid numbers.");
    }
    return Math.floor(Math.random() * (max - min + 1)) + min;
  }

  /**
   * 将数字四舍五入到指定的小数位。
   *
   * @param value 要四舍五入的数字
   * @param digits 小数位数,默认为 0
   * @returns 四舍五入后的数字
   */
  static roundTo(value: number, digits: number = 0): number {
    if (!this.isNumber(value) || !this.isNumber(digits)) {
      throw new Error("Both value and digits must be valid numbers.");
    }
    const factor = Math.pow(10, digits);
    return Math.round(value * factor) / factor;
  }

  /**
   * 将数字向上取整到指定的小数位。
   *
   * @param value 要向上取整的数字
   * @param digits 小数位数,默认为 0
   * @returns 向上取整后的数字
   */
  static ceilTo(value: number, digits: number = 0): number {
    if (!this.isNumber(value) || !this.isNumber(digits)) {
      throw new Error("Both value and digits must be valid numbers.");
    }
    const factor = Math.pow(10, digits);
    return Math.ceil(value * factor) / factor;
  }

  /**
   * 将数字向下取整到指定的小数位。
   *
   * @param value 要向下取整的数字
   * @param digits 小数位数,默认为 0
   * @returns 向下取整后的数字
   */
  static floorTo(value: number, digits: number = 0): number {
    if (!this.isNumber(value) || !this.isNumber(digits)) {
      throw new Error("Both value and digits must be valid numbers.");
    }
    const factor = Math.pow(10, digits);
    return Math.floor(value * factor) / factor;
  }

  /**
   * 格式化数字为千分位表示法。
   *
   * @param value 要格式化的数字
   * @returns 格式化后的数字字符串
   */
  static formatThousands(value: number): string {
    if (!this.isNumber(value)) {
      throw new Error("Invalid number provided.");
    }
    return value.toLocaleString('en-US');
  }
}
相关推荐
我命由我1234516 小时前
Android Studio - Android Studio 自定义预览尺寸
android·java·ide·java-ee·android studio·android-studio·android runtime
取个名字太难了~18 小时前
越用越便宜,越用越强大:影像 SDK 的边际成本递减与网络效应实践
android·数码相机·美颜·相机连接·demu
全堆鸿蒙18 小时前
27 RdbPredicates 条件查询详解:EqualTo、OrderBy、组合条件
华为·harmonyos·鸿蒙系统
心中有国也有家18 小时前
AtomGit Flutter 鸿蒙客户端: ChangeNotifier 模式
学习·flutter·华为·harmonyos
国服第二切图仔19 小时前
HarmonyOS APP《画伴梦工厂》开发第59篇-碰一碰精准分享——跨设备素材插入
华为·harmonyos
hqzing19 小时前
在鸿蒙 PC 上使用 Claude Code(最新的 Bun 版本)
华为·harmonyos
xd18557855520 小时前
鸿蒙AI菜谱生成器:基于ArkTS原生开发与鸿蒙PC适配实战
人工智能·华为·harmonyos·鸿蒙
GitCode官方21 小时前
开源鸿蒙跨平台直播|QRN 跨端鸿蒙一体化实战
人工智能·华为·开源·harmonyos·atomgit
ZZZMMM.zip1 天前
演示架构师-PPT大纲生成的HarmonyOS开发实践
人工智能·华为·powerpoint·harmonyos·鸿蒙·鸿蒙系统
AFinalStone1 天前
Android 7系统网络(四)Native层(下)—netd Controller详解
android·网络