这是我的代码
private void button2_Click(object sender, EventArgs e)
{
try
{
ans = double.Parse(txtb1.Text) - double.Parse(txtb2.Text);
string time = ans.ToString();
double seconds = TimeSpan.Parse(time); // Duration is not working
label1.Text = seconds.ToString();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
我试图从点之后向上舍入,即如果它大于或等于60,它应该将一个加到整数并从尾数(十进制)中减去它 我的意思是,如果我的值为1.70,我应该有2.10,即2小时10分钟
答案 0 :(得分:1)
如果您想使用逻辑操作1.70的倍数值到小时和分钟,您应该执行以下操作。
var dbl = 1.70;
var hours = Math.Floor(dbl);
var minutes = (dbl - hours) * 100;
var ts = TimeSpan.FromHours(hours).Add(TimeSpan.FromMinutes(minutes));
Console.WriteLine("{0}h {1}min", Math.Floor(ts.TotalHours), ts.Minutes);
如果您的值实际上是“{Hours}。{Minutes}”并且可以在100小时内获得“100.500”500分钟,那么您需要更改解析值的方式以获得小时和分钟。
答案 1 :(得分:0)
您可能正在寻找Math.Ceiling(ans)
。
它总是向上舍入,即使十进制值低于0.5
答案 2 :(得分:0)
如果您想根据发布的格式更正时间字符串,我建议使用此方法:
public static double correctTime(string commaTime)
{
double d = Convert.ToDouble(commaTime, CultureInfo.InvariantCulture);
int basis = (int)d;
// if the number after the comma is larger than 0.6 then just add 0.4
return d - basis > 0.6 ? d = d + 0.4 : d;
}
至于转换为TimeSpan
,您需要将您的号码设置为正确的格式:
string s = "1.7";
double cor_s = correctTime(s);
string time = cor_s.ToString("00.00").Replace('.', ':'); // or
现在您可以将其解析为TimeSpan
:
TimeSpan t = TimeSpan.Parse(time);
或者如果你只想要秒:
double total_seconds = TimeSpan.Parse(time).TotalSeconds;
我希望我能正确理解你的问题