【问题标题】:Carpark calculation停车场计算
【发布时间】:2014-05-09 09:07:05
【问题描述】:

我正在尝试的是,如果小时数超过 8,则收取最高费用,否则计算小时数和小时费率的乘积。小时数必须四舍五入。例如,如果他们输入 2.3 或 2.9,则需要四舍五入为 3。

我知道这很简单,但 Visual Studio 说 parkTime 是一个变量,但像 method 一样使用,我被卡住了。仍然是 C# 的菜鸟。

详细说明:停车场的停车费是按小时数(四舍五入)乘以每小时 2.50 美元的费率计算的。最高停车费为 20.00 美元,例如停车 4 小时收取 10.00 美元的费用,停车 10 小时收取 20.00 美元的停车费(即最高费用)。

我的程序需要通过键盘输入小时数并将停车费输出到屏幕上。

注意:使用“命名常量”而不是变量或文字来表示固定数量,例如 常量十进制 HOURLY_RATE = 2.50; 常量十进制 MAX_FEE = 20.00;

class Program
{
    static void Main(string[] args)
    {
        decimal parkTime;  // input - time in hour eg 1.5 for 1 and hour hours 
        const decimal HOURLY_RATE = 2.50m;
        const decimal MAX_FEE = 20.00m;
        decimal parkFee;
        Console.WriteLine("Time parked in hours: Eg 1.5 or 2.75");
        parkTime = decimal.Parse(Console.ReadLine());

        if (parkTime > 8)
        {
            Console.Write("Total fee is $" + MAX_FEE);
        }
        else
        {
            parkFee = parkTime (Math.Ceiling) * HOURLY_RATE;
           Console.Write("Parking Fee = $" + parkFee);
        }

        Console.ReadKey(); // pause (before program ends) 
    }
}

【问题讨论】:

  • 您真的要收集HOURLY_RATE 吗?那没有意义。我想你的意思是“停车时间必须四舍五入。”

标签: c#


【解决方案1】:

你的顺序错了。应该是Math.Ceiling(parkTime)

【讨论】:

  • 应该限制的不是parkTime,而是hourly_rate,恕我直言,代码行应该是parkFee = parkTime * Math.Ceiling(HOURLY_RATE);
  • 我不这么认为。我相信OP希望将用户输入的时间四舍五入为整数。为什么您将速率声明为 decimal 只是为了稍后对其进行舍入?
  • 但这句话不就是这个意思吗? The hourly rate must be rounded up. Eg if they enter 2.3 or 2.9 it needs to be rounded to 3.
  • 这就是为什么我说我认为情况正好相反。如果您注意到,OP 正在将用户输入分配给 parkTime。
  • @DrCopyPaste - 我也不这么认为。但你是对的,问题是这样的。我通知了 OP。
【解决方案2】:

这是一个简单的语法错误。 parkTime (Math.Ceiling) 应该怎么做?你想要Math.Ceiling(parkTime) * HOURLY_RATE。

顺便说一句:您可以使用 Math.Min 进一步简化代码:

parkTime = decimal.Parse(Console.ReadLine());

parkFee = Math.Min(8, Math.Ceiling(parkTime)) * HOURLY_RATE;

因为你的MAX_FEE 等于8 * HOURLY_RATE。

【讨论】:

  • Math.Max 或 Math.Min 你说一个然后使用另一个?
  • @DaveParsons - 谢谢,已更正。我总是感到困惑,因为您希望该值最大为 8(最多),但是要实现这一点,如果 8 更小,则需要使用 Math.Min 使用 8;如果 parkTime 更小,则需要使用 parkTime。
【解决方案3】:

您的代码甚至可以编译吗?询问这条线的原因

parkTime (Math.Ceiling) * HOURLY_RATE;

不应该这样吗

Math.Ceiling(parkTime) * HOURLY_RATE;

【讨论】:

  • 是的,感谢这解决了问题。弄错了。抱歉,这一切还是新手,但感谢您的帮助
  • @user3615881,点击投票按钮下方的检查按钮,尝试接受任何一个答案。
猜你喜欢
  • 2019-08-11
  • 1970-01-01
  • 1970-01-01
  • 2012-03-16
  • 1970-01-01
  • 1970-01-01
  • 2016-02-08
  • 1970-01-01
  • 2021-12-20
相关资源
最近更新 更多