Math.Ceiling 在使用 String.Length 时出现“调用不明确”错误

问题描述 投票:0回答:2

我尝试调用

Math.Ceiling(word.Length / 2)
来获取单词的中间部分,但它给了我以下错误:

以下方法或属性之间的调用不明确:“Math.Ceiling(decimal) 和 Math.Ceiling(double)”

虽然我知道这是编译器担心识别正确的重载方法,但我不确定如何指示我正在使用哪个方法。我也不明白为什么这很重要?

这是我的完整程序:

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            string word = "Deleveled";
            word = word.ToUpper();
            bool isPalindrome = true;
            for (var i = 0; i <= Math.Ceiling(word.Length / 2); i++)
            {
                char tmp = word[word.Length - i - 1];
                if (Char.ToUpper(word[i]) != Char.ToUpper(tmp))
                {
                    isPalindrome = false;
                    break;
                }
            }
            Console.WriteLine(isPalindrome);
            Console.ReadLine();
        }
    }
}

这里有什么问题?

c# math compiler-errors
2个回答
13
投票

整数除法总是得到一个整数;所以:

word.Length / 2
返回
int
(向下舍入)。

当你对此调用

Math.Ceiling
时,你正在传递一个整数,但 不是
Math.Ceiling(int)
。它有两个选择:
Math.Ceiling(double)
Math.Ceiling(decimal)
,但是:它可以使用其中任何一个,从编译器的角度来看,这两个都不是更好。

坦率地说,使用通用“页数”公式可能更简单:

int pages = (items + pageSize - 1) / pageSize;

在这种情况下变得简单:

int upperLimit = (word.Length + 1) / 2;

(请注意,通用页数公式也可以写成

int pages = ((items - 1) / pageSize) + 1;
,尽管在这种情况下,替换固定页面大小会更困难)


0
投票

这是因为 Math.Ceiling() 只接受 double 数据类型参数,并且大多数时候我们在不知不觉中传递了 int 或 float,所以只需将这些值类型转换为 double 即可解决问题

将“int”值转换为“double”值将如下所示::

Math.Ceiling((double) (15)); //这里 15 是一个 int 值,它将被类型转换为 double

© www.soinside.com 2019 - 2024. All rights reserved.