我在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分钟..我想要一些解决方案来做这个..请帮助我,因为我的整个申请依赖于此。
答案 0 :(得分: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 points out,您必须决定如何处理8.70
等值。
答案 1 :(得分:1)
尝试这样的事情。这是我的头脑:
int hours = Math.Floor(totaldays);
int minutes = (totaldays - Math.Floor(totaldays)) * 100;
答案 2 :(得分:1)
您可以使用f2格式说明符
格式化doubledouble 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]);
多数民众赞成你已经完成了