2013-07-11 55 views
0

我在c#中的应用程序在工资管理系统上...我想每个员工的工作时间在变量中...对于这个使用双精度的...我假设员工工作8小时和20分钟..then项会像在文本框中8.20 ...所以我在一个变量using`在c中的变量小数点后存储零点#

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

不要使用双用户条目 - 无论是使用字符串或有两个文本框小时和分钟。 –

+5

我可以建议TimeSpan吗?你试图用一种方式来使用双精度,这种方式可能会以多种方式结束,而不仅仅是你现在遇到的问题。如果某人已经工作了8小时30分钟,然后又想再增加40分钟,那么最终的结果将是8.7,这绝对没有意义。 – Ellesedil

+1

我建议你参考你的四年级算术教科书并复习小数和分数。缺乏这种基本的理解会使编程几乎不可能。对于写薪水的应用程序,这几乎是可怕的... –

回答

1

尝试类似这样的东西。这是把我的头顶部:

int hours = Math.Floor(totaldays); 
int minutes = (totaldays - Math.Floor(totaldays)) * 100; 
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 

但作为Ellesedilpoints out,您将不得不决定如何处理值8.70

+0

虽然这并不回答实际问题,但这是它应该完成的方式。 – Ellesedil

+0

thnxxxxxxx for ur grt help ...... !!!!!!!! – roanjain

1

你可以只格式化双重具有f格式说明

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]); 

完蛋了你做

+0

编辑为文化支持 –