模糊调用方法" Round(a:System.Double):System.Double; Round(d:System.Decimal):System.Decimal"

时间:2012-07-17 13:31:44

标签: .net rounding type-conversion delphi-prism oxygene

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

这是我的违规代码:

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

RawMin是Int32数据类型。

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

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

1 个答案:

答案 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);

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

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