将字符串格式08:30转换为float 8.5

时间:2019-06-12 14:24:58

标签: c#

我相信与此相关,但我确实走得太远了,我看不到我目前错在哪里,我想从显示在8:30的文本框中获取float值是8.5。

对于8:30,我总是得到8.3的值。 这是我当前的代码,请纠正我错的地方。

var value = _event.EventText; // 08:18:00\ntekst!"
    timeSpan = TimeSpan.Parse(split[0]);
    textBoxSaldo.Text = timeSpan.ToString("hh':'mm");

    CultureInfo ci = (CultureInfo)CultureInfo.CurrentCulture.Clone();
    ci.NumberFormat.CurrencyDecimalSeparator = ":";
    float saldo = float.Parse(textBoxSaldo.Text, NumberStyles.Any, ci);

enter image description here

感谢大家的帮助

4 个答案:

答案 0 :(得分:2)

您可以这样做:

double saldo = TimeSpan.Parse(textBoxSaldo.Text).TotalHours;

编辑

或者进行有效性检查,例如Zohar Peled's answer

答案 1 :(得分:1)

如果08:30代表一天中的某个时间值,则最简单的转换为代表小时数的浮点数将使用TimeSpan

if(TimeSpan.TryParse(textBoxSaldo.Text, out TimeSpan ts))
{
    var saldo = ts.TotalHours;
}
else
{
    // show an error message to the client.
}

答案 2 :(得分:1)

这是您要寻找的吗?

public static void Main()
{
    string input = "8:30";
    float output = ParseTimeAsDecimal(input);
    Console.WriteLine(output);
}

public static float ParseTimeAsDecimal(string time)
{
    DateTime d = DateTime.ParseExact(time, "H:mm", CultureInfo.InvariantCulture);
    int hours = d.Hour;
    int minutes = d.Minute;
    float minutesFraction = minutes / 60f;
    return ((float)hours) + minutesFraction;
}

输入:8:30

输出:8.5

答案 3 :(得分:0)

以下方法可能并不理想,但您可以尝试:

  1. 从文本框中获取文本,您的字符串将采用x:y格式
  2. 在第1步中用string.split(':')分割字符串
  3. 将步骤2中的拆分字符串中的x和y转换为浮点(y = split [1] / 60)
  4. saldo = x + y