2016-11-23 79 views
-2

这里是我的代码我怎么能圆时间,在C#.NET计算时间,双时

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分

+3

定义“向上取整”。 1.1s应该是1s还是2s? (我假设1.5s..1.9s会变成2s) –

+0

你究竟在做什么?将double转换为字符串然后尝试将其解析为'TimeSpan'没有多大意义。 – ChrisF

+1

txtb1.Text和txtb2.Text中有什么?你能提供样本数据吗?和预期的结果? – Tatranskymedved

回答

0

您可能正在寻找Math.Ceiling(ans)。 它将始终围捕,即使小数点值低于0.5

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; 

我希望我理解正确的话您的问题

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); 

如果你的价值实际上是“{小时}。{分}”,可能有“100.500”为100小时500分钟那么你就需要改变你的分析得到小时和分钟值。