You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何将数值截断保留两位小数,无尾部零则省略?

在C#中实现数值截断保留两位小数并去除尾部零的方法

要实现需求,需要分两步:先对数值进行向下取整(截断)到两位小数,再格式化输出以去除尾部的零和多余小数点。以下是针对不同数值类型的具体实现:

1. 核心思路

  • 截断处理:将数值乘以100后取向下取整,再除以100,得到保留两位小数的截断结果。
  • 格式化输出:使用自定义格式字符串,让结果仅在有非零小数部分时显示小数位,否则只显示整数部分。

2. 针对不同类型的代码实现

处理decimal类型

decimal精度无损失,直接计算即可:

decimal input1 = 77.1455m;
decimal input2 = 52.00m;
decimal input3 = 714.1554m;
decimal input4 = 5552.0001m;

// 截断到两位小数
decimal truncated1 = Math.Floor(input1 * 100) / 100;
decimal truncated2 = Math.Floor(input2 * 100) / 100;
decimal truncated3 = Math.Floor(input3 * 100) / 100;
decimal truncated4 = Math.Floor(input4 * 100) / 100;

// 格式化输出
string result1 = truncated1.ToString("0.##"); // "77.14"
string result2 = truncated2.ToString("0.##"); // "52"
string result3 = truncated3.ToString("0.##"); // "714.15"
string result4 = truncated4.ToString("0.##"); // "5552"

处理double/float类型

由于浮点数存在精度问题,建议先转换为decimal再处理,避免计算误差:

double input1 = 77.1455;
double input2 = 52.00;
double input3 = 714.1554;
double input4 = 5552.0001;

// 转换为decimal后截断,再转回double
double truncated1 = (double)Math.Floor((decimal)input1 * 100) / 100;
double truncated2 = (double)Math.Floor((decimal)input2 * 100) / 100;
double truncated3 = (double)Math.Floor((decimal)input3 * 100) / 100;
double truncated4 = (double)Math.Floor((decimal)input4 * 100) / 100;

// 格式化输出
string result1 = truncated1.ToString("0.##"); // "77.14"
string result2 = truncated2.ToString("0.##"); // "52"
string result3 = truncated3.ToString("0.##"); // "714.15"
string result4 = truncated4.ToString("0.##"); // "5552"

3. 格式字符串说明

"0.##"的作用:

  • 0:强制显示整数部分,即使数值为0也会显示。
  • ##:表示最多显示两位小数,仅当小数位有非零值时才显示,尾部的零会自动省略。

4. 为什么之前的方法无效?

  • String.Format("0.00"):强制显示两位小数,所以52.00会输出"52.00",不符合需求。
  • String.Format("G29"):会保留数值的有效数字,但不会进行截断处理,原始数值的小数部分会被保留,无法得到截断后的结果。

内容的提问来源于stack exchange,提问作者Adam Brown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 19:40:20