1

我想将分钟转换为秒,目前我遇到了问题,因为在我输入 1.50 的分钟文本框中,结果是 90 秒,这是错误的,因为 1.30 = 90 秒

    private void MtoCbutton_Click(object sender, EventArgs e)
    {
        if (minTosecTextBox.Text != "Minutes")
        {
            minutes = Convert.ToDouble(minTosecTextBox.Text);
            TimeSpan span = TimeSpan.FromMinutes(minutes);
            resultSectextBoxtextBox.Text = span.TotalSeconds.ToString();
        }

        else
        {

            MessageBox.Show("Please enter Minutes");
        }
4

3 回答 3

7

您可能正在寻找类似TimeSpan.Parse方法的东西:

var ts = TimeSpan.Parse("00:01:30");

这将产生 90 秒的 TimeSpan。

还有一种ParseExact方法可以让您指定格式字符串,因此您不必每次都指定小时数,甚至可以指定一个点作为分隔符:

var ts = TimeSpan.ParseExact("01.30", @"mm\.ss", System.Globalization.CultureInfo.InvariantCulture);

有关格式字符串,请参阅自定义日期和时间格式字符串

另请注意,您需要转义要按字面解释的每个字符(因此在\之前.)。

您的案例的完整代码

var ts = TimeSpan.ParseExact(minTosecTextBox.Text, @"mm\.ss", System.Globalization.CultureInfo.InvariantCulture);
resultSectextBoxtextBox.Text = ts.TotalSeconds.ToString();
于 2016-12-03T21:40:44.073 回答
2

您需要以不同的方式处理文本的转换。您将“1.50”直接转换为双精度数,即 1.5 和 1 和 1/2 分钟相当于 90 秒。如果您想允许用户输入“1.50”并表示 1 分 50 秒,那么您需要拆分字符串。你可以这样做:

var split = text.Split('.');
int seconds = 0;
if (split.Length > 1)
{
    seconds = int.Parse(split[1]);
}
seconds += TimeSpan.FromMinutes(split[0]).Seconds;

注意 - 如果您不验证文本,那么您最终可能会失败。您可能应该使用 TryParse 来验证秒数。Parse 可以抛出异常。

于 2016-12-03T21:35:44.563 回答
-2

要将秒转换为分钟,您只需除以 60.0(您需要小数,否则它将被视为整数)。如果将其视为整数并且经过 30 秒,则 30/60 将等于 0。

也用double.TryParse方法。现在如果有人输入 1.50xx,你的应用程序就会崩溃。要么使用double.TryParse方法,要么使用 try catch 机制,或者只允许输入数字。

编辑

这将完成你想要的。我添加了一个标签来显示输出,但您可以将其删除。

double enteredNumber;
if (double.TryParse(minTosecTextBox.Text, out enteredNumber))
{
    // This line will get everything but the decimal so if entered 1.45, it will get 1
    double minutes = Math.Floor(enteredNumber);

    // This line will get the seconds portion from the entered number.
    // If the number is 1.45, it will get .45 then multiply it by 100 to get 45 secs
    var seconds = 100 * (enteredNumber - Math.Floor(enteredNumber));

    // now we multiply minutes by 60 and add the seconds
    var secondsTotal = (minutes * 60 + seconds);

    this.labelSeconds.Text = secondsTotal.ToString();
}

else
{

    MessageBox.Show("Please enter Minutes");
}

编辑 2

一些进一步的澄清

您没有将分钟转换为秒,因为如果您是 1.5(1 分半)将等于 90 秒。这是合乎逻辑且显而易见的。您仅将小数点前的部分视为分钟,小数点后的部分将视为秒(1.30 = 1 分钟和 30 秒 = 90 秒)。因此,我们只需要将小数点前的部分转换为秒,并加上小数点后的部分。

于 2016-12-03T21:40:27.327 回答