0

我在 C# 中的应用程序是在工资管理系统上...我希望每个员工的工作时间可变...为此我使用双倍...假设员工工作 8 小时 20 分钟..那么该条目将类似于文本框中的 8.20 ......所以我使用`将小数点前的部分分隔在一个变量中

var values = totaldays.ToString(CultureInfo.InvariantCulture).Split('.');
int firstno = int.Parse(values[0]);
int secondno = int.Parse(values[1]);`

所以我准确地获得了第一个变量,但如果小数点后的部分包含零,它不会存储在“secondno”变量中。零点自动消除, 8.20 和 8.2 的结果相同,即 8.2 。

但由于时间不同,一个是 8 小时 20 分钟,另一个是 8 小时 2 分钟..我想要一些解决方案来做到这一点..请帮助我,因为我的整个应用程序都依赖于此。

4

3 回答 3

7

如果用户输入小时和分钟,为什么不使用TimeSpan?

var input = "8.20";
var time = TimeSpan.ParseExact(input, @"h\.mm", null);
var hours = time.Hours;      // 8
var minutes = time.Minutes;  // 20

延伸阅读


如果您确实必须首先将其存储为小数,您仍然可以使用以下方法进行管理:

var input = 8.20m;
var parts = input.ToString("0.00", CultureInfo.InvariantCulture).Split('.');
var hours = int.Parse(parts[0]);     // 8
var minutes =  int.Parse(parts[1]);  // 20

但正如Ellesedil 指出的那样,您必须决定如何处理8.70.

于 2013-07-11T16:11:29.487 回答
1

您可以使用 f2 格式说明符格式化 double

double d = 8.20;
string str = d.ToString("f2", System.Globalization.CultureInfo.InvariantCulture)
int hour = int.Parse(str.Split('.')[0]);
int min = int.Parse(str.Split('.')[1]);

就这样你完成了

于 2013-07-11T16:20:44.483 回答
1

尝试这样的事情。这是我的想法:

int hours = Math.Floor(totaldays);
int minutes = (totaldays - Math.Floor(totaldays)) * 100;
于 2013-07-11T16:10:41.033 回答