我的表中有一个用户输入值。 如果用户输入3.2,则表示3小时20分钟。
我显示了整个星期内用户输入的总小时数。
输入是:
太阳:3.2
星期一:4.5
星期二:5.0
现在,3.2 + 4.5 + 5.0 = 12.70,这意味着12小时70分钟。 但是,我希望结果是13.10(13小时10分钟)而不是12.70。
我需要在一个选择查询中的总数,该查询将我的网格与其余数据绑定在一起。
目前我在选择查询中使用sum函数以及其他列。
我该怎么做?
答案 0 :(得分:3)
您的输入格式根本不起作用。
你很幸运,它在你的例子中,但在大多数情况下它不会。例如,如果2个人输入“1小时50分钟”:
1.5 + 1.5 = 3.0
你不能把它读成:“三个小时”,因为实际上它是“3小时40分钟”。
一旦“分钟”的总和大于0.99,你就错了。
但是在少数幸运的情况下,你可以做一些算术运算(如果你想要一个与输入相同的“双”格式的结果)?
var inputList = new List<double>() {3.2, 4.5, 5.0};
double total = inputList.Sum();
int baseHours = (int)Math.Floor(total);
int realBaseHours = (int)inputList.Sum(d => Math.Floor(d));
if (baseHours > realBaseHours)
throw new Exception("All hell breaks loose!");
int baseMinutes = (int)(total * 100.0 - baseHours * 100.0);
int finalHours = baseHours + baseMinutes / 60;
int finalMinutes = baseMinutes % 60;
double result = finalHours + finalMinutes / 100.0;
答案 1 :(得分:0)
将时间保存为双重格式并不好,但对于您的问题:
将所有时间作为double值数组获取并进行一些算术运算:
double[] times = { 3.2, 4.5, 5.0 };
int hours = 0;
int minuts = 0;
string[] values;
foreach (double t in times)
{
values = t.ToString("#.00").Split('.');
hours += int.Parse(values[0]);
minuts += int.Parse(values[1]);
}
hours += minuts / 60;
minuts += minuts % 60;
它适用于所有类型的双格式。