如何用小数点后两位来做数学运算
本文关键字:两位 运算 小数点 何用 | 更新日期: 2023-09-27 18:16:10
我在这里有这段代码,用于监视字节数组传输的状态。问题是它最后总是一个整数。我每10%更新一次DB中的表,所以知道它何时恰好是10.00%是很重要的,否则每10%就会发生数百次DB调用。
任何想法?我数学很烂:)
double percentageComplete = 0;
percentageComplete = (int)(totalReadCount / (double)fileSize * 100);
您可能需要考虑另一种更新数据库的方法。测试一个数字是"10%"还是"10.00%"是不可靠的。
相反,测试它何时>该百分比,然后设置一个标志来指示您已经为该百分比完成了数据库更新。
去掉cast,你会看到:
percentageComplete = (int)(totalReadCount / (double)fileSize * 100);
改成:
percentageComplete = (totalReadCount / (double)fileSize * 100);
为什么在计算后要将其强制转换为(int) ?删除(int)强制转换,然后应该就可以了。
下面应该会得到你想要的结果
percentageComplete = (totalReadCount / (double)fileSize * 100);
您正在将double
转换为int
,因此当然您的结果将是一个整数,该整数削减了尾随小数。所以如果你有double
等于8.9会被截断为8 8.1也会被截断为8。所以如果你的10%接近9,你的10%将非常不准确,因为它被切断到8。
对于"精确的"10%,字节不能分割,所以一个近似值是你能得到的最好的。
一个11,111字节长的文件将有111,11字节作为10%,但是计算机读取整个字节,就像如果你有11.111个人,你不能取确切的10%,因为把一个人分成一个人+ 111人的0.11%是不可能的。
所以你通过四舍五入得到最佳近似值。
int fileSize10p = Math.Round((double)fileSize / 10.0); //10% of file size
if(fileSize10p == totalReadCount){
//do something
}