鸿蒙三方库 | 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 工具库,更多功能请参考官方文档与后续系列文章。

相关推荐
AI备忘录9 小时前
(十九)华为华三锐捷迈普思科 交换机链路聚合配置命令(LACP/静态聚合五厂商对照)
运维·服务器·网络·网络协议·tcp/ip·华为
贾伟康9 小时前
【时光清单|19】HarmonyOS ArkTS 回归测试实战:覆盖启动、空数据、异常输入和重复点击
软件测试·harmonyos·arkts·回归测试·hypium
坚果的博客10 小时前
Flutter OHOS 环境搭建实战:oh-3.44.9-dev 从 0 到 1 完整记录
flutter·华为·harmonyos
坚果的博客10 小时前
认识 CPF-RN:React Native 鸿蒙官方社区与四大核心仓库
react native·react.js·harmonyos
大雷神11 小时前
HarmonyOS ArkGraphics 2D可变帧率实操——同屏对比30、60和90 FPS动画
华为·harmonyos
OH_TPC11 小时前
【鸿蒙优选三方库】@react-native-ohos/react-native-fast-image:高性能图片加载与缓存组件
缓存·华为·harmonyos·鸿蒙
贾伟康13 小时前
【句匠|03】HarmonyOS ArkTS 每日打卡实战:实现连续天数、补签边界和本地日期判断
harmonyos·arkts·本地存储·每日打卡·学习应用
小雨青年13 小时前
【HarmonyOS 7 平行视界深度实战】02 从普通页面到第一个平行视界 Demo
华为·harmonyos
~远在太平洋~13 小时前
06-鸿蒙系统 uitest UI 自动化指南
ui·自动化·harmonyos
OH_TPC13 小时前
OpenHarmony平台RN三方库适配情况
华为·harmonyos·鸿蒙