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

C#中Math.Truncate使用不当,需将26.8截断为26的问题

登山纪录判断程序的时间取整问题解决

你的需求很明确:开发控制台程序判断登山者是否打破纪录,每攀登50米损失30秒,计算损失时间wastedTime时需要向下取整(比如26.5秒取26秒,而非27秒)。

当前代码的正确性

你用Math.Truncate((range / 50) * 30)计算损失时间的方式完全正确。Math.Truncate()会直接截断浮点数的小数部分,对于正数场景来说,这和向下取整的效果完全一致,刚好满足你把26.5取为26的需求。

可选替代方案

如果想更明确表达“向下取整”的语义,也可以用Math.Floor()方法,在正数场景下它和Math.Truncate()结果完全相同:

double wastedTime = Math.Floor((range / 50) * 30);

代码优化建议(可选)

你的代码逻辑没问题,做几个小调整能让可读性更好:

  • 变量命名更直观,比如把range改成climbDistance,timeForOneMeter改成timePerMeter
  • 简化分支判断,else if (georgesTime>record)可以直接写成else,因为只有两种情况

优化后的代码示例:

class Program
{
    static void Main(string[] args)
    {
        double record = double.Parse(Console.ReadLine());
        double climbDistance = double.Parse(Console.ReadLine());
        double timePerMeter = double.Parse(Console.ReadLine());

        double baseTime = timePerMeter * climbDistance;
        double wastedTime = Math.Truncate((climbDistance / 50) * 30);
        double totalTime = baseTime + wastedTime;

        if (totalTime <= record)
        {
            Console.WriteLine($"Yes! The new record is {totalTime:F2} seconds.");
        }
        else
        {
            Console.WriteLine($"No! He was {totalTime - record:F2} seconds slower.");
        }
    }
}

测试验证

比如当攀登距离为44.1667米时,(44.1667 / 50) * 30 = 26.5,经过Math.Truncate()处理后wastedTime的值为26,完全符合你的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:01:16