0

我被困在我的程序中,我需要计算黄金/分钟,但我的数学公式不会做想要的事情。当我将小时数输入浮点数(大约 1.2 小时)时,转换将是 72 分钟,而不是我需要的 80 分钟。你能帮我么 ?我在下面的评论中标记了问题所在。这是我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace YourGold
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Welcome to YourGold App! \n------------------------");
            Console.WriteLine("Inesrt your gold: ");
            int gold = int.Parse(Console.ReadLine());
            Console.WriteLine("Your gold is : " + gold);
            Console.WriteLine("Inesrt your time(In Hours) played: ");
            float hours = float.Parse(Console.ReadLine());
            int minutes = 60;
            float time = (float)hours * minutes; // Here the calculation are wrong...
            Console.WriteLine("Your total time playd is : " + time + " minutes");
            float goldMin = gold / time;
            Console.WriteLine("Your gold per minute is : " + goldMin);
            Console.WriteLine("The application has ended, press any key to end this app. \nThank you for using it.");
            Console.ReadLine();

        }
    }
}

非常感谢。

PS它与这个问题有关:只允许插入数字并将小时转换为分钟来计算黄金/分钟 - 更新,我更新它与此相同,但我认为我应该像现在一样做一个新问题(我仍在学习如何继续使用这个平台:) )

4

4 回答 4

3

使用内置TimeSpan

TimeSpan time = TimeSpan.FromHours(1.2);
double minutes = time.TotalMinutes;

TimeSpan.FromHours方法 返回表示指定小时数的 TimeSpan,其中规范精确到最接近的毫秒。

你也可以这样做:

// string timeAsString = "1:20";
TimeSpan time;
if (TimeSpan.TryParse(timeAsString, CultureInfo.InvariantCulture, out time))
{
    double minutes = time.TotalMinutes;
    //... continue 
}
else
{
    // Ask user to input time in correct format
}

或者:

var time = new TimeSpan(0, 1, 20, 0);
double minutes = time.TotalMinutes;
于 2013-09-19T08:32:00.347 回答
2

如果您真的希望您的程序按照您的意愿运行,请执行此操作。

time = (int)hours * 60 + (hours%1)*100
于 2013-09-19T08:40:32.157 回答
1
var minutes = TimeSpan.FromHours(1.2).TotalMinutes; // returns 72.0
于 2013-09-19T08:33:06.353 回答
0
var hours = 1.2;
var minutes = ((int)hours) * 60 + (hours%1)*100;

附带说明:这种输入时间的方式在 IMO 中不是一个好的方式。这会令人困惑,我猜人们通常会实际输入1:20而不是1.2,这会破坏您的应用程序。如果没有,他们可能会1.5考虑90几分钟。我知道我会那样做。

于 2013-09-19T08:44:39.060 回答