如何使这个数学使用两位小数?

时间:2011-11-29 14:31:02

标签: c# c#-4.0

我这里有这段代码用于监视字节数组传输的状态。问题是它总是以一个整数来结束。我每10%更新一个数据库中的表,因此知道它何时正好是10.00%是重要的,否则每10%就会发生数百次数据库调用。

有什么想法吗?我吮吸数学:)

double percentageComplete = 0;
percentageComplete = (int)(totalReadCount / (double)fileSize * 100);

5 个答案:

答案 0 :(得分:2)

您可能需要考虑更新数据库的其他方法。测试数字是否恰好" 10%"或" 10.00%"不可靠。

相反,测试它是什么时候>该百分比,然后设置一个标志,表示您已完成该百分比的数据库更新。

答案 1 :(得分:1)

删除演员,你有:

percentageComplete = (int)(totalReadCount / (double)fileSize * 100);

将其更改为:

percentageComplete = (totalReadCount / (double)fileSize * 100);

答案 2 :(得分:0)

为什么在计算之后将它强制转换为(int)?删除(int)强制转换,然后就可以了。

答案 3 :(得分:0)

下面应该得到你想要的结果

percentageComplete = (totalReadCount / (double)fileSize * 100);

答案 4 :(得分:0)

您正在将double转换为int,因此您的结果当然是整数,整数会减少尾随小数。因此,如果double等于8.9将被截断为8,而8.1将被截断为8。 因此,如果您的10%接近9,那么您的10%将非常不准确,因为它被切断为8。

对于“精确”10%,不能分割字节,因此近似值是最佳的。

一个11,111字节长的文件将有111,11个字节作为10%,但是计算机读取整个字节,就好像你有11.111个人一样,你不能拿到10%,因为分裂一个人拿一个0.11一个人的百分比+ 111人不是一种选择。

所以你通过四舍五入得到了最好的近似值。

int fileSize10p = Math.Round((double)fileSize / 10.0); //10% of file size

if(fileSize10p ==  totalReadCount){
  //do something
}