我在应用程序/设置文件中插入了一个Double类型的变量,我正在使用“while”循环进行一个小的计算:
double final=0;
double cost = application.settings.default.cost; // 0.15
while(true)
{
Thread.Sleep(1000); //speeded up version of 60000 (1 minute)
final+=cost;
//code that waits for the user to quit the loop
}
1小时后的结果应该是9.00但它的计算结果是24.00:/ 但是,如果我将值硬编码到代码中,我得到所需的结果9.00
double final=0;
double cost = 0.15
while(true)
{
Thread.Sleep(1000); //speeded up version of 60000 (1 minute)
final+=cost;
//code that waits for the user to quit the loop
}
有什么想法吗?
答案 0 :(得分:3)
Thread.sleep代码(1000);并不意味着您的代码每秒都执行一次。 如果以这种方式运行代码10次,持续1小时,您将得到10个不同的结果。
这里也讨论了这个问题: How accurate is Thread.Sleep(TimeSpan)?
(虽然Thread.Sleep与TimeSpan一起使用。主要问题保持不变)
编辑:
我不知道你究竟在计算什么。但是以这种方式计算成本并不是一个好方法,因为它非常不准确。
最好在开始计算成本时采用时间戳,并在完成后再采用另一个时间戳。获取两个时间戳的差异,您可以非常准确地计算成本。你的代码运行的时间越长,你的方法越来越不准确。