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

c#保留小数点后几位 和 保留有效数字

一、保留小数点后几位

二、保留有效数字

三、注意事项


 C# 中保留小数点后几位和保留有效数字的方法对比:

需求类型实现方法示例代码说明
保留小数点后几位ToString () 格式化double num = 3.14159;
string res = num.ToString("F2");
结果为 "3.14",自动四舍五入,返回字符串,确保固定小数位数
保留小数点后几位ToString () 自定义格式double num = 3.14159;
string res = num.ToString("0.000");
结果为 "3.142",使用 0 占位符,强制显示指定小数位数(包括末尾 0)
保留小数点后几位Math.Round () 方法double num = 3.14159;
double res = Math.Round(num, 2);
结果为 3.14,返回数值类型,四舍五入到指定小数位,用于数值计算
保留有效数字自定义方法(四舍五入)double res = RoundToSignificantDigits(123.456, 3);结果为 123,需实现自定义函数,处理不同数量级的数字
保留有效数字自定义方法(科学计数法兼容)double res = RoundToSignificantDigits(0.0012345, 2);结果为 0.0012,支持小数位前有多个 0 的情况,按有效数字规则计算

补充说明:

  1. 保留小数点后几位更适合固定精度场景(如货币计算)
  2. 保留有效数字适合需要反映测量精度的场景(如科学计算)
  3. 字符串格式化方法(ToString)适合展示,数值方法(Math.Round 或自定义方法)适合计算
  4. 有效数字计算需注意:0.00123 的 2 位有效数字是 0.0012,而 12300 的 2 位有效数字是 12000

 

一、保留小数点后几位

主要通过ToString()方法配合格式字符串,或使用Math.Round()方法实现:

使用ToString()格式化

double num = 3.1415926;// 保留2位小数
string result1 = num.ToString("F2"); // 结果: "3.14"// 保留3位小数
string result2 = num.ToString("0.000"); // 结果: "3.142"

使用Math.Round()四舍五入

double num = 3.1415926;// 保留2位小数
double result = Math.Round(num, 2); // 结果: 3.14

二、保留有效数字

保留有效数字需要自定义方法,因为 C# 没有直接的格式化字符串支持:

public static double RoundToSignificantDigits(double num, int digits)
{if (num == 0)return 0;// 计算需要的缩放比例double scale = Math.Pow(10, Math.Floor(Math.Log10(Math.Abs(num))) + 1 - digits);// 四舍五入到指定的有效数字位数return Math.Round(num * scale) / scale;
}// 使用示例
double num = 123.456;
double result1 = RoundToSignificantDigits(num, 3); // 结果: 123
double result2 = RoundToSignificantDigits(num, 4); // 结果: 123.5

三、注意事项

  • ToString("F2")会进行四舍五入,并确保结果包含指定的小数位数(即使是 0)
  • Math.Round()返回的是数值类型,而ToString()返回的是字符串
  • 有效数字计算需要考虑数字的数量级,自定义方法更灵活
  • 对于 float 类型,方法类似,只需将 double 替换为 float 即可

根据实际需求选择合适的方法,如果需要显示结果,通常使用ToString()格式化;如果需要进行数值计算,使用Math.Round()或自定义有效数字方法更合适。

http://www.xdnf.cn/news/16934.html

相关文章:

  • 【智能体agent】入门之--4.1 autogen agentic rag
  • C++继承中虚函数调用时机问题及解决方案
  • CG--逻辑判断1
  • 译 | BBC Studios团队:贝叶斯合成控制方法SCM的应用案例
  • C++ --- stack和queue的使用以及简单实现
  • 第三章 网络安全基础(一)
  • PendingIntent相关流程解析
  • 京东零售在智能供应链领域的前沿探索与技术实践
  • 逻辑回归召回率优化方案
  • 《协作画布的深层架构:React与TypeScript构建多人实时绘图应用的核心逻辑》
  • 插件升级:Chat/Builder 合并,支持自定义 Agent、MCP、Rules
  • Spring Boot 2.1.18 集成 Elasticsearch 6.6.2 实战指南
  • 使用GPU和NPU视频生成的优劣对比
  • 修改DeepSeek翻译得不对的V语言字符串文本排序程序
  • (线段树)SP2916 GSS5 / nfls #2899 查询最大子段和 题解
  • 烽火HG680-KX-海思MV320芯片-2+8G-安卓9.0-强刷卡刷固件包
  • 一种新的分布式ID生成方案--ULID
  • 自学嵌入式 day40 51单片机
  • Web开发-PHP应用弱类型脆弱Hash加密Bool类型Array数组函数转换比较
  • sqli-labs:Less-17关卡详细解析
  • IIS 让asp.net core 项目一直运行
  • 8.1 开始新的学习历程
  • linux编译基础知识-工具链
  • 数据结构与算法——字典(前缀)树的实现
  • 抢占先机,PostgreSQL 中级专家认证的职业跃迁
  • React 19 革命性升级:编译器自动优化,告别手动性能调优时代
  • Linux编程: 10、线程池与初识网络编程
  • Docker Compose入门(2)
  • Linux系统编程Day3-- Linux常用操作(续)
  • 报错[Vue warn]: Failed to resolve directive: else如何解决?