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

相关推荐
贾伟康4 小时前
【共创稿事节】HarmonyOS 7.0 BindContentCover全屏模态:从接入到生产验证
性能优化·实战·harmonyos·arkts·arkui
KevinChaos7 小时前
声音明信片实验室 03|HarmonyOS 7.0 音频空间化:双版本试听无缝切换
harmonyos
贾伟康7 小时前
【共创稿事节】HarmonyOS 7.0 Menu菜单与上下文:从接入到生产验证
性能优化·实战·harmonyos·arkts·arkui
码间留白7 小时前
鸿蒙端对接 BLE 血压计:从一次握手到读数入库(二)设备篇
物联网·uni-app·鸿蒙·蓝牙ble·血压计
行者-全栈开发8 小时前
Flutter 插件 device_calendar_plus 开源鸿蒙适配实战:从权限弹窗失灵到循环日程跑通
flutter·跨平台·harmonyos·arkts·日历·适配·开源鸿蒙
贾伟康10 小时前
【共创稿事节】HarmonyOS 7.0 BindSheet半模态浮层:从接入到生产验证
性能优化·实战·harmonyos·arkts·arkui
JosieBook10 小时前
【鸿蒙PC GUI适配】chiaki-ng 移植的工程实践:Qt6/QML 与 ArkUI 的混合窗口架构
华为·架构·harmonyos
Dream-Y.ocean19 小时前
鸿蒙PC平台宅匠 3D 室内设计适配实战:基于 Electron 壳方案的 Three.js 双渲染引擎与参数化户型编辑器开发
javascript·3d·harmonyos
行者-全栈开发19 小时前
【共创稿事节】HarmonyOS 应用上架全流程中的隐私合规:权限最小化、数据本地化与 AppAnalyzer 体检
harmonyos·鸿蒙·隐私合规·应用上架·agc·appanalyzer
贾伟康21 小时前
HarmonyOS API 26 UKey PIN 授权门禁:状态查询、失败归因与资源闭环
华为·harmonyos