Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从另一个hh.mm格式时间(十进制)中减去一个hh.mm格式时间?_C#_Sql - Fatal编程技术网

C# 如何从另一个hh.mm格式时间(十进制)中减去一个hh.mm格式时间?

C# 如何从另一个hh.mm格式时间(十进制)中减去一个hh.mm格式时间?,c#,sql,C#,Sql,我在一个SQL数据库中有4条记录。它有两个柱小时1和小时2 记录1:hours1-1.00,hours2-1.00 记录2:小时1-9.00,小时2-5.30 记录3:小时1-9.00,小时2-9.00 记录4:小时1-3.00,小时2-3.00 这里我得到了这些柱的总和: SUM of column1 : 22.00 SUM of column1 : 18.30 这些都是小数,但我认为是时间。< /P> 现在我想从第1列求和中减去第2列求和,即 22.00 - 18.30 因此,我将

我在一个SQL数据库中有4条记录。它有两个柱小时1和小时2

  • 记录1:hours1-1.00,hours2-1.00
  • 记录2:小时1-9.00,小时2-5.30
  • 记录3:小时1-9.00,小时2-9.00
  • 记录4:小时1-3.00,小时2-3.00
这里我得到了这些柱的总和:

SUM of column1 : 22.00
SUM of column1 : 18.30
这些都是小数,但我认为是时间。< /P> 现在我想从第1列求和中减去第2列求和,即

22.00 - 18.30 
因此,我将得到
3.7
,这是错误的,因为我认为这是一个时间

我想要的最终答案是:3.30(要求的理由:所以当我把这个结果加到18.30(18.30+3.30,即21.60=22.00小时,60分钟=1小时),我得到了总数22.00)


有人能帮我如何得到
3.30
吗?我不能使用TimeFormat。

正如大家在评论中所说:需要转换,必须在求和之前完成

以下是如何:

var times1 = new decimal[] { 1.00m, 9.00m, 9.00m, 3.00m };
var times2 = new decimal[] { 1.00m, 5.30m, 9.00m, 3.00m };

var hours1 = ActualHours(times1).Sum(); // using System.Linq;
var hours2 = ActualHours(times2).Sum();
var diff = hours1 - hours2;

var result = "Actual: hours1 = " + hours1 +
                   ", hours2 = " + hours2 +
                   ", diff   = " + diff + "\r\n" +
            "Printed: hours1 = " + Print(hours1) +
                   ", hours2 = " + Print(hours2) +
                   ", diff   = " + Print(diff);
使用的方法:

public IEnumerable<decimal> ActualHours(params decimal[] values)
{
    foreach (var v in values)
    {
        var t = Math.Truncate(v);
        yield return t + (v - t) / 0.6m;
    }
}

public string Print(decimal v)
{
    var t = Math.Truncate(v);
    return (t + (v - t) * 0.6m).ToString("0.00");
}

正如每个人在评论中所说:转换是必要的,必须在求和之前完成

以下是如何:

var times1 = new decimal[] { 1.00m, 9.00m, 9.00m, 3.00m };
var times2 = new decimal[] { 1.00m, 5.30m, 9.00m, 3.00m };

var hours1 = ActualHours(times1).Sum(); // using System.Linq;
var hours2 = ActualHours(times2).Sum();
var diff = hours1 - hours2;

var result = "Actual: hours1 = " + hours1 +
                   ", hours2 = " + hours2 +
                   ", diff   = " + diff + "\r\n" +
            "Printed: hours1 = " + Print(hours1) +
                   ", hours2 = " + Print(hours2) +
                   ", diff   = " + Print(diff);
使用的方法:

public IEnumerable<decimal> ActualHours(params decimal[] values)
{
    foreach (var v in values)
    {
        var t = Math.Truncate(v);
        yield return t + (v - t) / 0.6m;
    }
}

public string Print(decimal v)
{
    var t = Math.Truncate(v);
    return (t + (v - t) * 0.6m).ToString("0.00");
}

如果要将时间存储为小数(不),则不要将30分钟存储为
.3
而是存储为
.5
…要获取时间值,可以将小数转换为时间,然后进行计算,然后再转换回小数。然后先转换数据。您无法在错误的数字上进行预期正确结果的计算。没有应用程序太大而无法更改,只是意味着需要更长的时间。此外,由于懒惰的程序员,正确的结果比错误的结果要好。如果你不想更改数据,那么你就完蛋了。没有办法知道你的总和中
3.0
的结果是
2.0
+
1.0
(三小时)还是
0.3
+
0.3
+
0.3
+
0.3
+
0.3
+
0.3
+
0.3
0.3。。。(十个半小时,即五个小时)。如果您将时间存储为小数(不要),则不要将三十分钟存储为
.3
,而是存储为
.5
…要获取时间值,您可以将小数转换为时间,然后进行计算,然后再转换回小数。然后首先转换数据。您无法在错误的数字上进行预期正确结果的计算。没有应用程序太大而无法更改,只是意味着需要更长的时间。此外,由于懒惰的程序员,正确的结果比错误的结果要好。如果你不想更改数据,那么你就完蛋了。没有办法知道你的总和中
3.0
的结果是
2.0
+
1.0
(三小时)还是
0.3
+
0.3
+
0.3
+
0.3
+
0.3
+
0.3
+
0.3
0.3。。。(十个半小时,即五个小时)。你能解释一下实际小时()和打印()是如何工作的吗?到底是什么让人难以理解?你有没有试过调试和监控手表中的几个变量,这应该很清楚?我完全理解Peter B。首先我没有调试就尝试了。这就是为什么我有点困惑,但调试后我完全理解了。你能解释一下ActualHours()和Print()是如何工作的吗?到底是什么让我很难理解?你有没有试过调试和监控手表中的几个变量,这应该会让你明白吗?我完全理解Peter B。首先我没有调试就尝试了,这就是为什么我有点困惑的原因,但调试后我完全理解了。