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

前言

数值判断和转换在数据校验中非常常用,如判断是否整数、是否偶数、字符串转数字等。@pura/harmony-utils 的 NumberUtil 封装了数值判断和转换方法。本文将从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 工具库,更多功能请参考官方文档与后续系列文章。

相关推荐
360智汇云38 分钟前
鸿蒙开发中如何实现画中画
华为·harmonyos
donk13142 小时前
React Native for OpenHarmony 实战:三方库 react-native-toast-message 的鸿蒙化适配指南
react native·react.js·音视频·harmonyos
Flutter_OH3 小时前
Flutter OHOS Dart 堆栈符号化
harmonyos
Flutter_OH3 小时前
Flutter OHOS Flutter 多设备自适应 DPI 指导文档
harmonyos
SuperHeroWu73 小时前
【HarmonyOS 7】 应用 Agent 接入云 A2A 与端 A2A 的实践详解
ai·harmonyos·小艺
用户29469405448164 小时前
个人开发者上架鸿蒙 AI 应用,最后倒在安全评估实名制这一格
harmonyos·deepseek
Keya4 小时前
HarmonyOS 开发实战:用 util.Aspect 玩转 AOP 切面编程
harmonyos
威哥爱编程5 小时前
HarmonyOS 7 Agent 开发实战 03:Tool Calling 让 AI 查实时订单与库存
agent·harmonyos
威哥爱编程5 小时前
HarmonyOS 7 Agent 开发实战 02:Agent 工程脚手架与对话 UI 骨架
agent·harmonyos
Georgewu13 小时前
【HarmonyOS 7】 HarmonyOS 应用 Skill创建和编排详解
harmonyos