我对为什么调用Math.Round方法会引发“Ambiguous Call”编译器错误感到困惑。
这是我的违规代码:
Math.Round((2000-((Splots[x].RawMin/4095)*2000))+200);
RawMin是Int32数据类型。
我想,Round方法应该以Int32值类型返回。
任何提示或线索将不胜感激。谢谢,
答案 0 :(得分: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
的原因。在这种情况下,您“知道”结果将在适当的范围内,但计算结果。