1. 使用 Random 类(简单场景)

2. 使用 RandomNumberGenerator 类(安全场景)

3. 生成指定精度的随机小数


C# 中生成随机数的常用方法:

随机数类型实现方式示例代码特点与适用场景
随机整数(无范围)Random 类Random rnd = new Random();
int num = rnd.Next();
生成 0 到 int.MaxValue 之间的整数,适用于简单随机场景
随机整数(指定上限)Random 类int num = rnd.Next(100); // 0-99(不包含 100)生成 0 到指定最大值之间的整数,适合需要控制上限的场景
随机整数(指定范围)Random 类int num = rnd.Next(5, 15); // 5-14(包含 5,不包含 15)生成指定区间内的整数,适用范围明确的场景
随机双精度浮点数Random 类double num = rnd.NextDouble(); // 0.0-1.0(不包含 1.0)生成 0 到 1 之间的小数,可通过计算扩展到任意范围
安全随机整数RandomNumberGenerator 类int num = RandomNumberGenerator.GetInt(100); // 0-99加密级随机数生成,适合安全敏感场景(如密码重置令牌),需引用 System.Security.Cryptography
安全随机字节数组RandomNumberGenerator 类byte[] data = new byte[16];
RandomNumberGenerator.Fill(data);
生成指定长度的随机字节数组,用于加密、密钥生成等安全场景
指定范围的随机小数结合 Random 与计算double num = rnd.NextDouble() * (20 - 5) + 5; // 5.0-20.0生成任意区间的随机小数,通过线性变换实现
固定精度随机小数结合 Random 与四舍五入double num = Math.Round(rnd.NextDouble() * 100, 2); // 保留 2 位小数生成指定精度的随机小数,适合需要控制小数位数的场景(如金额)

关键说明:

  1. Random类适合普通场景,创建成本低但随机性较弱,避免短时间内创建多个实例(可能生成相同序列)
  2. RandomNumberGenerator类提供加密级随机性,适合安全相关场景,但性能开销略高
  3. 多线程环境中,Random需要同步处理,RandomNumberGenerator则线程安全
  4. 如需可重复的随机序列(如测试),可使用new Random(固定种子)构造Random实例

1. 使用 Random 类(简单场景)

// 创建Random实例(建议程序中只创建一个实例)
Random random = new Random();// 生成0到int.MaxValue之间的随机整数
int randomInt = random.Next();// 生成0到指定最大值(不包含)之间的随机整数
int randomIntWithMax = random.Next(100); // 0-99之间// 生成指定范围内(包含最小值,不包含最大值)的随机整数
int randomIntInRange = random.Next(10, 20); // 10-19之间// 生成0.0到1.0之间的随机双精度浮点数
double randomDouble = random.NextDouble();// 生成指定范围内的随机双精度浮点数
double randomDoubleInRange = random.NextDouble() * (max - min) + min;

2. 使用 RandomNumberGenerator 类(安全场景)

适合加密、安全相关场景,需要引用 System.Security.Cryptography 命名空间:

using System.Security.Cryptography;// 生成0到指定最大值(不包含)之间的随机整数
int secureInt = RandomNumberGenerator.GetInt(100); // 0-99之间// 生成指定范围内的随机整数
int secureIntInRange = RandomNumberGenerator.GetInt(10, 20); // 10-19之间// 生成随机字节数组
byte[] randomBytes = new byte[10];
RandomNumberGenerator.Fill(randomBytes);

3. 生成指定精度的随机小数

// 生成保留2位小数的随机数(0-100之间)
Random random = new Random();
double value = random.NextDouble() * 100;
double roundedValue = Math.Round(value, 2); // 保留2位小数

注意事项:

  • Random 类的默认构造函数使用系统时钟作为种子,短时间内创建多个实例可能生成相同序列
  • 多线程环境下使用 Random 需要加锁,或使用 RandomNumberGenerator
  • 安全敏感场景必须使用 RandomNumberGenerator
  • 如需重复生成相同序列,可使用带固定种子的 Random 构造函数:new Random(seed)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/917170.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/917170.shtml
英文地址,请注明出处:http://en.pswp.cn/news/917170.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flink 算子链设计和源代码实现

1、JobGraph (JobManager) JobGraph 生成时,通过 ChainingStrategy 连接算子,最终在 Task 中生成 ChainedDriver 链表。StreamingJobGraphGeneratorcreateJobGraph() 构建jobGrapch 包含 JobVertex setChaining() 构建算子链isCha…

对接八大应用渠道

背景最近公司想把游戏包上到各个渠道上,因此需要对接各种渠道,渠道如下,oppo、vivo、华为、小米、应用宝、taptap、荣耀、三星等应用渠道 主要就是对接登录、支付接口(后续不知道会不会有其他的)&#x…

学习:入门uniapp Vue3组合式API版本(17)

42.打包发行微信小程序的上线全流程 域名 配置 发行 绑定手机号 上传 提交后等待,上传 43.打包H5并发布上线到unicloud的前端页面托管 完善配置 unicloud 手机号实名信息不一致:请确保手机号的实名信息与开发者姓名、身份证号一致,请前往开…

SOLIDWORKS材料明细表设置,属于自己的BOM表模板

上一期我们了解了如何在SOLIDWORKS工程图中添加材料明细表?接下来,我们将进行对SOLIDWORKS材料明细表的设置、查看缩略图、模板保存的深度讲解。01 材料明细表设置菜单栏生成表格后左侧菜单栏会显示关于材料明细表的相关设置信息。我们先了解一下菜单栏设置详情&am…

全栈:Maven的作用是什么?本地仓库,私服还有中央仓库的区别?Maven和pom.xml配置文件的关系是什么?

Maven和pom.xml配置文件的关系是什么: Maven是一个构建工具和依赖管理工具,而pom.xml(Project Object Model)是Maven的核心配置文件。 SSM 框架的项目不一定是 Maven 项目,但推荐使用 Maven进行管理。 SSM 框架的项目可…

超越 ChatGPT:智能体崛起,开启全自主 AI 时代

引言 短短三年,生成式 AI 已从对话助手跨越到能自主规划并完成任务的“智能体(Agentic AI)”时代。这场演进不仅体现在模型规模的提升,更在于系统架构、交互范式与安全治理的全面革新。本文按时间线梳理关键阶段与核心技术,为您呈现 AI 智能体革命的脉络与未来趋势。 1. …

一杯就够:让大脑瞬间在线、让肌肉满电的 “Kick-out Drink” 全解析

一杯就够:让大脑瞬间在线、让肌肉满电的 “Kick-out Drink” 全解析“每天清晨,当闹钟还在哀嚎,你举杯一饮,睡意像被扔出擂台——这,就是 Kick-out Drink 的全部浪漫。”清晨 30 分钟后,250 mL 常温水里溶解…

系统开机时自动执行指令

使用 systemd 创建一个服务单元可以让系统开机时自动执行指令,假设需要执行的指令如下,运行可执行文件(/home/demo/可执行文件),并输入参数(–input/home/config/demo.yaml): /home/…

Docker 初学者需要了解的几个知识点 (七):php.ini

这段配置是 php.ini 文件中针对 PHP 扩展和 Xdebug 调试工具的设置,主要用于让 PHP 支持数据库连接和代码调试(尤其在 Docker 环境中),具体解释如下:[PHP] extensionpdo_mysql extensionmysqli xdebug.modedebug xdebu…

【高阶版】R语言空间分析、模拟预测与可视化高级应用

随着地理信息系统(GIS)和大尺度研究的发展,空间数据的管理、统计与制图变得越来越重要。R语言在数据分析、挖掘和可视化中发挥着重要的作用,其中在空间分析方面扮演着重要角色,与空间相关的包的数量也达到130多个。在本…

dolphinscheduler中一个脚本用于从列定义中提取列名列表

dolphinscheduler中,我们从一个mysql表导出数据,上传到hdfs, 再创建一个临时表,所以需要用到列名定义和列名列表。 原来定义两个变量,不仅繁锁,还容易出现差错,比如两者列序不对。 所以考虑只定义列定义变量…

JavaWeb(苍穹外卖)--学习笔记16(定时任务工具Spring Task,Cron表达式)

前言 本篇文章是学习B站黑马程序员苍穹外卖的学习笔记📑。我的学习路线是Java基础语法-JavaWeb-做项目,管理端的功能学习完之后,就进入到了用户端微信小程序的开发,用户端开发的流程大致为用户登录—商品浏览(其中涉及…

灵敏度,精度,精确度,精密度,精准度,准确度,分辨率,分辨力——概念

文章目录前提总结前提 我最近在整理一份数据指标要求的时候,总是混淆这几个概念:灵敏度,精度,精确度,精密度,精准度,准确度,分辨率,分辨力,搜了一些文章&…

python-异常(笔记)

#后续代码可以正常运行 try:f open("xxx.txt","r",encodingutf-8)except:print("except error")#捕获指定异常,其他异常报错程序中止,管不到 try:print(name) except NameError as you_call:print("name error"…

[lvgl_player] 用户界面(LVGL) | 播放器核心设计

docs:基于LVGL的音乐播放器 本项目是为嵌入式设备设计的音乐播放系统,采用LVGL图形库构建用户界面。 系统支持播放WAV格式音频文件,具备播放列表管理功能,可实现播放/暂停控制、曲目切换等核心操作。 用户可通过交互界面实时调…

数据赋能(354)——数据分析——多角度分析原则

概述重要性如下:获得全面理解:多角度分析原则避免仅从单一角度解读数据,从不同角度、不同维度对数据进行分析,以获得更全面的理解。发现潜在规律:通过多角度分析,发现数据中的潜在规律和趋势,为…

【华为机试】127. 单词接龙

文章目录127. 单词接龙描述示例 1:示例 2:提示:解题思路算法分析问题本质分析单向BFS算法详解双向BFS算法详解邻居单词生成过程算法流程图边界情况分析各种解法对比时间复杂度分析空间复杂度分析关键优化点实际应用场景图构建策略双向BFS优化…

仿艾莫迅MODBUS调试工具写一个上位机

公司采购了一个夹具,项目负责人想要试探这个夹具的性能,于是想要我这边写一个烤机的程序,小编结合官网资料 https://wiki.amsamotion.com/?title196&doc222查看其pdf说明文档和调试工具并按照其工具写一个烤机上位机根据项目负责人的要求…

云展厅:开启数字化展示新时代

在科技飞速发展的今天,数字化浪潮正席卷各个行业,展览展示领域也不例外。云展厅作为一种全新的展览形式,正逐渐崭露头角,以其独特的优势和创新的技术应用,为观众带来前所未有的观展体验,也为企业和机构提供…

硬件电路基础学习

一、基础元器件学习 1、电阻 1.1 作用 电阻的工作原理是基于欧姆定律,即电阻的阻值取决于其材料、长度和横截面积。电阻的主要作用是限制电流,调节电压和电流,以及保护电路。1.2 数值计算 欧姆定律 通过欧姆定律计算所需保护电阻的大小注意…