鸿蒙三方库 | harmony-utils之NumberUtil数值判断与转换详解

前言

数值判断和转换在数据校验中非常常用,如判断是否整数、是否偶数、字符串转数字等。@pura/harmony-utilsNumberUtil 封装了数值判断和转换方法。本文将从API说明、代码实战、进阶用法、常见问题等多个维度进行全面讲解,帮助开发者快速掌握并应用到实际项目中。

一、NumberUtil判断核心API

NumberUtil 提供了以下数值判断方法:

方法 说明 返回类型 使用场景
isNaN(value) 是否NaN boolean 无效数值
isFinite(value) 是否有限数 boolean 有效性检查
isInteger(value) 是否整数 boolean 整数判断
isSafeInteger(value) 是否安全整数 boolean 安全范围
isNumber(value) 是否数值 boolean 类型判断
isEven(num) 是否偶数 boolean 奇偶判断
isOdd(num) 是否奇数 boolean 奇偶判断
toNumber(str) 字符串转数字 number 类型转换

1.1 核心特性

  • 简洁易用:封装复杂逻辑为一行调用,降低使用门槛
  • 类型安全:完整的TypeScript类型定义,编译期即可发现错误
  • 异常处理:内置异常捕获机制,避免运行时崩溃
  • 全面覆盖:覆盖NaN、有限数、整数、奇偶等判断场景

1.2 数值判断对照

方法 输入 结果 说明
isNaN NaN true 非数值
isFinite Infinity false 无限大
isInteger 3.14 false 非整数
isEven 4 true 偶数
isOdd 3 true 奇数

二、完整使用步骤

2.1 安装依赖

bash 复制代码
ohpm install @pura/harmony-utils

2.2 数值判断

typescript 复制代码
import { NumberUtil } from '@pura/harmony-utils';

Button('数值判断')
  .width('100%')
  .onClick(() => {
    try {
      let isInt = NumberUtil.isInteger(3.14);
      let isInt2 = NumberUtil.isInteger(5);
      let isEven = NumberUtil.isEven(4);
      let isOdd = NumberUtil.isOdd(3);
      this.result = `isInteger(3.14): ${isInt}\nisInteger(5): ${isInt2}\nisEven(4): ${isEven}\nisOdd(3): ${isOdd}`;
    } catch (e) {
      this.result = '异常: ' + e;
    }
  })

2.3 数值转换

typescript 复制代码
Button('数值转换')
  .width('100%')
  .onClick(() => {
    try {
      let num = NumberUtil.toNumber('123');
      let nan = NumberUtil.toNumber('abc');
      this.result = `toNumber('123'): ${num}\ntoNumber('abc'): ${nan}`;
    } catch (e) {
      this.result = '异常: ' + e;
    }
  })

三、完整页面示例

typescript 复制代码
import { NumberUtil } from '@pura/harmony-utils';

@Entry
@Component
struct NumberJudgeDemo {
  @State result: string = '';

  build() {
    Column({ space: 12 }) {
      Button('数值判断').width('100%').onClick(() => {
        this.result = `整数: ${NumberUtil.isInteger(5)}\n偶数: ${NumberUtil.isEven(4)}\n奇数: ${NumberUtil.isOdd(3)}`;
      });
      Button('数值转换').width('100%').onClick(() => {
        this.result = `toNumber('123'): ${NumberUtil.toNumber('123')}\nisNaN('abc'): ${NumberUtil.isNaN(NumberUtil.toNumber('abc'))}`;
      });
      Text(this.result).fontSize(14).fontColor('#333333')
    }
    .padding(16)
  }
}

四、进阶用法

4.1 输入校验

typescript 复制代码
import { NumberUtil, ToastUtil } from '@pura/harmony-utils';

function validateAge(input: string): boolean {
  let age = NumberUtil.toNumber(input);
  if (NumberUtil.isNaN(age)) {
    ToastUtil.show('请输入有效数字');
    return false;
  }
  if (!NumberUtil.isInteger(age) || age < 0 || age > 150) {
    ToastUtil.show('请输入有效年龄');
    return false;
  }
  return true;
}

4.2 分页计算

typescript 复制代码
function calculateTotalPages(total: number, pageSize: number): number {
  if (!NumberUtil.isInteger(total) || !NumberUtil.isInteger(pageSize) || pageSize <= 0) {
    return 0;
  }
  return Math.ceil(total / pageSize);
}

五、注意事项

  1. NaN判断:使用isNaN而非直接比较,NaN !== NaN
  2. 安全整数:JavaScript安全整数范围为 ±2^53-1
  3. toNumber:转换失败返回NaN,不会抛异常
  4. 初始化依赖 :使用前需确保 AppUtil.init() 已调用
  5. 浮点精度:isInteger对浮点精度敏感,0.1+0.2不是整数

六、常见问题

Q1: isInteger(0.1 + 0.2)返回什么?

返回false,因为0.1+0.2=0.30000000000000004,不是整数。

Q2: toNumber('123abc')返回什么?

返回NaN,因为无法完整解析为数字。

Q3: isEven对负数有效吗?

有效,isEven(-4)返回true。

Q4: isFinite(null)返回什么?

isFinite(null)返回true,因为null会被转为0。

总结

NumberUtil 的数值判断和转换方法为数据校验提供了便捷支持。本文详细介绍了核心API、使用步骤、完整示例、进阶用法以及常见问题的解决方案。开发者可以利用这些方法简化输入校验、类型转换等操作。

本文基于 @pura/harmony-utils 工具库,更多功能请参考官方文档与后续系列文章。

相关推荐
云端漫步19879 小时前
HarmonyOS 互动卡片实战:快递卡片与睡眠卡片完整开发流程
华为·harmonyos
智塑未来10 小时前
鸿蒙6.1隐私安心加倍:加密分享、星盾防诈、应用锁三重保护,守护到位
华为·harmonyos
byte轻骑兵11 小时前
2026手机远程办公:向日葵、TeamViewer、ToDesk鸿蒙适配+传文件+AI审计功能对比
智能手机·harmonyos·todesk·teamviewer·手机远程办公
贾伟康11 小时前
【知律|06】HarmonyOS ArkTS 法律分类实战:让民法、劳动、消费等入口可维护
harmonyos·arkts·arkui·分类设计·多设备
M-Robots echo1 天前
M-CLAW,面向具身智能的机器人任务编排开发框架
机器人·ros·鸿蒙·开源社区·m-robots
M-Robots echo1 天前
王成录:机器人产业下一个十年,拼的是 “系统级智能化” 而非单点算法堆叠
机器人·ros·鸿蒙·开源社区·m-robots·王成录
梦想不只是梦与想1 天前
鸿蒙 测试工具:DevEco Testing(一)
测试工具·harmonyos·testing
大锅盖11 天前
Web 工单要调用相机,第一步不是打开取景框,而是建立能力门禁
前端·数码相机·harmonyos
M-Robots echo1 天前
M-Robots ROS 兼容适配方案,实现存量机器人项目低成本迁移
机器人·ros·鸿蒙·开源社区·m-robots
贾伟康1 天前
【华夏二十四节气|07】HarmonyOS 6.0.2(22) ArkTS 节气搜索实战:多字段匹配与四态闭环
移动开发·harmonyos·arkts·arkui·本地搜索