C# 中生成隨機數的常用方法

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 數值計算 歐姆定律 通過歐姆定律計算所需保護電阻的大小注意…