前言

数值判断和转换在数据校验中非常常用,如判断是否整数、是否偶数、字符串转数字等。@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 安装依赖

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);
}

五、注意事项

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

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐