簡體   English   中英

如何使該數學使用小數點后兩位?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM