2016-12-29 67 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'。正如我在我的回答中所说的,我认为只需要格式化就可以实现它,说实话... –

相关问题