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

C#计算日期间隔天数时Math.Round保留2位小数失效问题

C# 日期间隔计算输出长小数、Math.Round不生效问题解决

问题背景

我是编程及C#开发初学者,编写了一段用于计算当前日期与指定未来日期间隔天数的代码,代码基础功能可正常运行,但输出的剩余天数为115.11560043243519这类多位长小数,我希望将结果四舍五入保留2位小数以优化输出格式,调用Math.Round(remainingDays, 2)处理后未达到预期效果,原始代码如下:

Console.WriteLine("Newport to Owensboro:");
var currentDate = DateTime.Now;
var endDate = new DateTime(2022, 10, 30);
double remainingDays = endDate.Subtract(currentDate).TotalDays;
Console.WriteLine("Days until completion: {0}\n", remainingDays);
Math.Round(remainingDays, 2);

失效原因

  • Math.Round()属于计算类方法,执行后会返回四舍五入完成的新值,不会直接修改你传入的原始remainingDays变量,你没有接收、使用这个返回值,等于白调用了这个方法。
  • 你的代码是先输出原始的remainingDays值,之后才执行四舍五入逻辑,执行顺序错误,输出环节根本没用到处理后的结果。

修复方法

选任意一种即可实现保留2位小数的需求:

方法1:接收Math.Round返回值后再输出

把四舍五入逻辑移到输出语句前,用变量接住处理后的结果再打印:

Console.WriteLine("Newport to Owensboro:");
var currentDate = DateTime.Now;
var endDate = new DateTime(2022, 10, 30);
double remainingDays = endDate.Subtract(currentDate).TotalDays;
// 接收四舍五入后的结果
double roundedResult = Math.Round(remainingDays, 2);
Console.WriteLine("Days until completion: {0}\n", roundedResult);

方法2:输出时直接指定格式化规则

不需要额外调用Math.Round,直接在字符串格式化阶段指定保留2位小数,写法更简洁:

Console.WriteLine("Newport to Owensboro:");
var currentDate = DateTime.Now;
var endDate = new DateTime(2022, 10, 30);
double remainingDays = endDate.Subtract(currentDate).TotalDays;
// {0:F2}表示对应第0个参数,格式化为固定2位小数
Console.WriteLine("Days until completion: {0:F2}\n", remainingDays);

补充提示:C#中double、int这类值类型传入方法时传递的是值的拷贝,方法内部的处理不会影响原始变量的值,后续遇到同类计算方法,都需要通过接收返回值的方式拿到处理后的结果。

内容的提问来源于stack exchange,提问作者M.DeMar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 16:45:43