1

我对为什么调用 Math.Round 方法会引发“歧义调用”编译器错误感到有些困惑。

这是我的违规代码:

Math.Round((2000-((Splots[x].RawMin/4095)*2000))+200);

RawMin 是 Int32 数据类型。

我想,Round 方法应该返回 Int32 值类型。

任何提示或线索将不胜感激。谢谢,

4

1 回答 1

2

查看 的重载列表Math.Round。有两种方法采用单个参数:

double Round(double d)
decimal Round(decimal d)

两者都在使用int参数调用时适用 - 但是当您只有一个int开始时调用该方法是没有意义的,因为它已经四舍五入了。

我怀疑你实际上想改变你做算术的方式,例如通过在double算术中执行除法运算,然后传播到其他操作:

// Note the 4095.0 to make it a double
Math.Round((2000-((Splots[x].RawMin/4095.0)*2000))+200);

没有它,所有的操作都使用整数算术,这几乎肯定不是你想要的。

您仍然需要将结果转换为int。的范围double超过了int和的范围long,这就是返回类型为的Math.Round(double)原因double。在这种情况下,您“知道”结果将在适当的范围内,但给定计算。

于 2012-07-17T13:35:45.727 回答