鸿蒙三方库 | 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 安装依赖
ohpm install @pura/harmony-utils
2.2 数值判断
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 数值转换
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;
}
})

三、完整页面示例
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 输入校验
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 分页计算
function calculateTotalPages(total: number, pageSize: number): number {
if (!NumberUtil.isInteger(total) || !NumberUtil.isInteger(pageSize) || pageSize <= 0) {
return 0;
}
return Math.ceil(total / pageSize);
}
五、注意事项
- NaN判断:使用isNaN而非直接比较,NaN !== NaN
- 安全整数:JavaScript安全整数范围为 ±2^53-1
- toNumber:转换失败返回NaN,不会抛异常
- 初始化依赖:使用前需确保
AppUtil.init()已调用 - 浮点精度: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工具库,更多功能请参考官方文档与后续系列文章。
更多推荐




所有评论(0)