我这里有这段代码用于监视字节数组传输的状态。问题是它总是以一个整数来结束。我每10%更新一个数据库中的表,因此知道它何时正好是10.00%是重要的,否则每10%就会发生数百次数据库调用。
有什么想法吗?我吮吸数学:)
double percentageComplete = 0;
percentageComplete = (int)(totalReadCount / (double)fileSize * 100);
答案 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
}