设置文件中的double值会产生错误的计算结果

时间:2013-10-19 15:24:00

标签: c#

我在应用程序/设置文件中插入了一个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
}

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

Thread.sleep代码(1000);并不意味着您的代码每秒都执行一次。 如果以这种方式运行代码10次,持续1小时,您将得到10个不同的结果。

这里也讨论了这个问题: How accurate is Thread.Sleep(TimeSpan)?

(虽然Thread.Sleep与TimeSpan一起使用。主要问题保持不变)

编辑:

我不知道你究竟在计算什么。但是以这种方式计算成本并不是一个好方法,因为它非常不准确。

最好在开始计算成本时采用时间戳,并在完成后再采用另一个时间戳。获取两个时间戳的差异,您可以非常准确地计算成本。你的代码运行的时间越长,你的方法越来越不准确。