在c#中的变量小数点后存储零

时间:2013-07-11 16:05:35

标签: c#

我在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分钟..我想要一些解决方案来做这个..请帮助我,因为我的整个申请依赖于此。

3 个答案:

答案 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格式说明符

格式化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]);

多数民众赞成你已经完成了