当前位置: 首页 > news >正文

HarmonyOS RandomUtil 随机数生成全攻略:整数、浮点数、布尔值一次搞定

文章目录

    • 背景
      • 总览方法
      • getRandomBoolean:随机布尔值
      • getRandomInt:随机整数
      • getRandomNumber:随机浮点数
      • getRandomLimit:生成 [0, limit) 范围内的随机整数
      • 三个数字随机方法对比
      • getRandomDataBlob 和 getRandomUint8Array:随机字节数据
      • 写在最后

背景

近期发现一款很有意思的HarmonyOS 三方库, 地址 @pura/harmony-utils(V1.4.0) , 作者是"桃花镇童长老", 我这里也是直接通过该作者公布的源码进行案例编写进行,写了到目前写了一部分demo ,感觉确实很有帮助,这里呢也是开始写一个系列的演示demo 供大家参考。如有帮助可以在OpenHarmony中进行下载安装进行使用哦

案例demo导航展示

↓↓↓↓↓↓接下来言归正传 ↓↓↓↓

日常开发里,随机数的需求很常见:随机排序、抽奖、生成测试数据、随机颜色……虽然 ArkTS 有原生的Math.random(),但RandomUtil封装了更丰富的方法,用起来更方便。

总览方法

先来看下这个三方库的方法有哪些

getRandomBoolean:随机布尔值

最简单的一个,随机返回truefalse

this.Btn('生成随机 Boolean','#4A90E2',()=>{constv=RandomUtil.getRandomBoolean();this.addLog(`getRandomBoolean() →${v}`);})

使用场景

  • A/B 测试中随机给用户分配实验组
  • 游戏里随机触发某个事件(50% 概率)
  • 生成随机测试数据时随机设置布尔字段

getRandomInt:随机整数

生成指定范围内的随机整数(包含两端边界值):

this.Btn(`getRandomInt(${this.intMin},${this.intMax})`,'#5A8DEE',()=>{constv=RandomUtil.getRandomInt(this.intMin,this.intMax);this.addLog(`getRandomInt(${this.intMin},${this.intMax}) →${v}`);})this.Btn('getRandomInt() 默认范围','#5A8DEE',()=>{constv=RandomUtil.getRandomInt();this.addLog(`getRandomInt() →${v}`);})

Demo 里有两个输入框让你设置 min 和 max:

Row({space:8}){TextInput({text:this.intMin.toString(),placeholder:'min'}).layoutWeight(1).height(38).fontSize(13).type(InputType.Number).onChange(v=>{this.intMin=parseInt(v)||0;})TextInput({text:this.intMax.toString(),placeholder:'max'}).layoutWeight(1).height(38).fontSize(13).type(InputType.Number).onChange(v=>{this.intMax=parseInt(v)||100;})}

实际运行结果

  • getRandomInt(1, 100)→ 1 到 100 之间的随机整数(包含 1 和 100)
  • getRandomInt()→ 默认范围内的随机整数

使用场景:抽奖序号生成、随机选取数组索引、骰子点数(getRandomInt(1, 6)

getRandomNumber:随机浮点数

生成指定范围内的随机浮点数:

this.Btn('getRandomNumber(10, 50)','#7B68EE',()=>{constv=RandomUtil.getRandomNumber(10,50);this.addLog(`getRandomNumber(10, 50) →${v}`);})

实际运行结果getRandomNumber(10, 50)→ 类似23.847...这样的浮点数

getRandomInt的区别:getRandomInt返回整数,getRandomNumber返回带小数的浮点数。

使用场景

  • 生成随机坐标(需要精确的经纬度)
  • 生成随机价格(需要小数)
  • 模拟传感器数据

getRandomLimit:生成 [0, limit) 范围内的随机整数

getRandomInt的区别是:getRandomLimit的范围是[0, limit)(不含 limit),即从 0 开始,最大值是 limit-1:

this.Btn('getRandomLimit(20)','#9B59B6',()=>{constv=RandomUtil.getRandomLimit(20);this.addLog(`getRandomLimit(20) →${v}(范围[0,20))`);})

实际运行结果getRandomLimit(20)→ 0 到 19 之间的整数

使用场景:随机选取数组中的一个元素时,getRandomLimit(array.length)直接作为索引使用:

constitems=['苹果','香蕉','橙子','草莓'];constrandomIndex=RandomUtil.getRandomLimit(items.length);constrandomItem=items[randomIndex];// 随机选一个水果

三个数字随机方法对比

方法范围类型典型使用
getRandomBoolean()true/falseboolean随机判断
getRandomInt(min, max)[min, max]integer随机整数,有范围
getRandomInt()默认范围integer快速随机整数
getRandomNumber(min, max)[min, max)float随机浮点数
getRandomLimit(limit)[0, limit)integer随机数组索引

getRandomDataBlob 和 getRandomUint8Array:随机字节数据

有时候需要生成随机的二进制数据,比如测试数据、加密随机盐:

this.Btn('getRandomDataBlob(8)','#E67E22',()=>{constblob=RandomUtil.getRandomDataBlob(8);this.addLog(`getRandomDataBlob(8).data → [${Array.from(blob.data).join(',')}]`);})this.Btn('getRandomUint8Array(6)','#E67E22',()=>{constarr=RandomUtil.getRandomUint8Array(6);this.addLog(`getRandomUint8Array(6) → [${Array.from(arr).join(',')}]`);})

实际运行结果

  • getRandomDataBlob(8)→ 8 个随机字节,每次结果不同,比如[23, 187, 45, 201, 7, 156, 89, 234]
  • getRandomUint8Array(6)→ 6 个随机字节的 Uint8Array

DataBlobUint8Array的区别:

  • DataBlob是 HarmonyOS 特有的类型,有.data属性(本质上就是Uint8Array
  • Uint8Array是标准的 JavaScript 类型,更通用

使用场景:加密操作需要随机盐(salt)时使用这两个方法生成。

写在最后

这篇把RandomUtil里数值相关的随机方法都过了一遍。下一篇讲字符串随机和颜色随机,以及 UUID 生成——这些在实际项目里用得也很多。

http://www.jsqmd.com/news/909269/

相关文章:

  • # 2026年广东童装批发/品牌童装尾货生产厂家实力排行榜:广州货源优质,基于童装供应链的5大权威推荐榜单 - 十大品牌榜
  • OpenClaw 源码解析(十四):Provider 系统与模型能力接入机制
  • Nemotron-3-Nano-Omni-30B-A3B-Reasoning-FP8视频处理深度解析:帧采样与内存优化策略
  • Vue3低代码平台实战:如何用可视化拖拽快速构建H5移动端应用
  • WinBtrfs终极指南:Windows原生读写Linux Btrfs文件系统的完整解决方案
  • DeepSeek-R1-Distill-Llama-8B容器化部署实战:Docker与MindIE镜像最佳实践
  • 从‘整蛊脚本’到安全测试:在虚拟机里安全玩转那些危险的Windows命令
  • 终极DroidCam OBS插件指南:3分钟将手机摄像头变为专业直播设备
  • AI Agent驱动B2B销售线索自动化:从零构建低成本自主SDR系统
  • 如何快速上手Yi-1.5-9B?3分钟完成本地部署与首次推理
  • 2026年最硬核的LangChain从入门到精通:全网最细核心组件全景剖析
  • 万里通积分卡怎么回收?回收平台如何选择? - 团团收购物卡回收
  • 如何利用ESP32多SPI总线实现高性能物联网设备共存方案
  • 别再踩坑了!微信小程序获取模糊位置(wx.getFuzzyLocation)从申请到调用的保姆级教程
  • Sora 2元宇宙内容创作革命(2024唯一通过OpenAI官方API+Unity XR双认证的生产链路)
  • 快速上手FinBERT-FLS:基于3500条标注数据的金融NLP模型实践指南
  • Adobe-GenP终极指南:3步免费激活Adobe全系列软件的完整方案
  • YouTube 升级 AI 生成内容标签体系:醒目展示、自动检测,鼓励创作者主动披露
  • 孝感黄金回收实力测评:长悦S级领跑,这些机构谁值得选? - 专业黄金回收
  • 实测MistralLite-openmind处理13400 tokens:亚马逊Aurora知识库问答实战
  • 别再只盯着效率了!手把手教你用M3406-ADJ设计3.3V降压模块(附PCB避坑指南)
  • 在多模型API调用中如何通过用量看板清晰掌握消费情况
  • 抖音一键去水印免费方法与工具推荐
  • 成都消防操作证报名费多少钱(内行拆解不被割韭菜) - 消防设施操作员考证
  • 终极中文文献管理方案:Jasminum让Zotero效率提升300%
  • FFlate架构设计:企业级JavaScript压缩解压性能优化方案
  • 魔兽争霸3终极优化指南:一键解锁15+隐藏功能,让经典游戏焕发新生
  • Llama3-ChatQA-1.5-8B震撼发布:新一代文档问答AI模型如何重塑智能交互体验?
  • 使用qBittorrent-Enhanced-Edition实现智能下载调度:自动启停与系统关机完整配置手册
  • 2026乌鲁木齐黄金回收实测:长悦等六家平台避坑指南 - 专业黄金回收