2016-12-29 52 views
0
public void ChangeTexts(long length, int position, int percent, double speed) 
     { 
      Label3.Text = "File Size: " + Math.Round((length/1024), 2) + " KB"; 

嚴重性代碼說明項目文件的線路抑制狀態 錯誤CS0121的調用以下方法或屬性之間曖昧:「Math.Round(雙,INT)」和「Math.Round(十進制,INT)」如何修復Round上的錯誤,我應該如何更改該行?

回答

2

您目前除以1024 整數運算,然後四捨五入的結果。換句話說,你正在四捨五入的東西已經是一個整數 - 沒有什麼用處。

最簡單的解決方法是由1024.0而不是分裂,使其在double算術發生:

Label3.Text = "File Size: " + Math.Round((length/1024.0), 2) + " KB"; 

或者更好的,只是做了格式化本身:

Label3.Text = $"File Size: {length/1024.0:0.00}KB"; 
2

錯誤是自我解釋。你應該指定你想要使用的類型。它發生因爲Math.Round()方法沒有long過載。

所以,你可以做這樣的:

public void ChangeTexts(long length, int position, int percent, double speed) 
{ 
    Label3.Text = "File Size: " + Math.Round((length/1024d), 2) + " KB"; 
} 

現在你double型操作。 d對於double類型是literal類型。現在表達式(double)length/1024d將返回double。並且Math.Round對它有過載。

+0

這就是現在要在整數運算中執行除法,將該整數轉換爲小數,並將其舍入到小數點後兩位。這有用嗎? –

+0

@JonSkeet我的壞,修正了一些細節 –

+1

由於分號仍然不能編譯,而且你不需要*兩個*操作數都是'double'。正如我在我的回答中所說的,我認爲只需要格式化就可以實現它,說實話... –

相關問題