[英]How to make this math use two places of the decimal?
我這里有這段代碼,用於監視字節數組傳輸的狀態。 問題是它總是以整數結尾。 我每10%更新一次數據庫中的表,因此知道何時精確到10.00%很重要,否則每10%可能發生數百次數據庫調用。
有任何想法嗎? 我在數學上很爛:)
double percentageComplete = 0;
percentageComplete = (int)(totalReadCount / (double)fileSize * 100);
您可能需要考慮另一種更新數據庫的方法。 測試數字何時精確為“ 10%”或“ 10.00%”是不可靠的。
相反,請測試它何時大於該百分比,然后設置一個標志以指示您已針對該百分比完成了數據庫更新。
刪除演員表,您可以這樣:
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%,因為將一個人拆分為一個人的0.11%人+ 111人不是一個選擇。
因此,通過舍入可以得到最佳近似值。
int fileSize10p = Math.Round((double)fileSize / 10.0); //10% of file size
if(fileSize10p == totalReadCount){
//do something
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.