将char数字转换为int时的值不正确

时间:2018-05-11 14:08:30

标签: c#

我的最终目标是取一个像29这样的数字,将它拉开,然后加上得到的两个整数。因此,如果数字为29,那么答案将是2 + 9 = 11.

当我调试时,我可以看到这些值被保留,但看起来其他值在这种情况下也是不正确的50,57。所以,我的答案是107.我不知道在哪里这些价值来自于,我不知道从哪里开始修复它。

我的代码是:

class Program
{
    static void Main(string[] args)
    {
        int a = 29;
        int answer = addTwoDigits(a);
        Console.ReadLine();


    }
        public static int addTwoDigits(int n)
        {
            string number = n.ToString();
            char[] a = number.ToCharArray();
            int total = 0;

            for (int i = 0; i < a.Length; i++)
            {
                total = total + a[i];
            }
            return total;
        }

}

5 个答案:

答案 0 :(得分:1)

您的代码实际上是添加了char的十进制值 看看https://www.cs.cmu.edu/~pattis/15-1XX/common/handouts/ascii.html

2和9的十进制值分别为50和57。在添加之前,您需要将char转换为int。

int val = (int)Char.GetNumericValue(a[i]);

答案 1 :(得分:0)

您的问题是您正在添加char值。请记住,char是一个整数值,表示ASCII中的字符。当您将a[i]添加到total值时,您正在添加代表int的{​​{1}}值,编译器会自动投射它。

问题在于此代码行:

char

上面的代码与此代码行相同:

total = total + a[i];

要解决您的问题,您必须通过以下方式更改该行:

total += (int)a[i];

// If a[i] = '2', the character value of the ASCII table is 50.
// Then, (int)a[i] = 50.
  

您可以看到此answer以了解如何转换数值   从total = (int)Char.GetNumericValue(a[i]); // If a[i] = '2'. // Then, (int)Char.GetNumericValue(int)a[i] = 2. char

     

在此page,您可以看到ASCII值表。

答案 2 :(得分:0)

只是为了好玩,我想我会看看我是否可以使用LINQ在一行中完成它,这里是:

public static int AddWithLinq(int n)
{
    return n.ToString().Aggregate(0, (total, c) => total + int.Parse(c.ToString()));
}

我认为这不是特别“干净”的代码,但它最多可能是教育性的!

答案 3 :(得分:0)

试试这个:

public static int addTwoDigits(int n)
    {
        string number = n.ToString();
        char[] a = number.ToCharArray();
        int total = 0;

        for (int i = 0; i < a.Length; i++)
        {
            total = total + (int)Char.GetNumericValue(a[i]);
        }
        return total;
    }

将转换的数字转换为char始终返回ASCII代码。因此,您可以使用GetNumericValue()方法获取值而不是ASCII代码

答案 4 :(得分:0)

public static int addTwoDigits(int n)
{
    string number = n.ToString()
    char[] a = number.ToCharArray();

    int total = 0;

    for (int i = 0; i < a.Length; i++)
    {
        total +=  Convert.ToInt32(number[i].ToString());
    }
    return total;
}