将值“01200000131”传递给此方法:

private static int sumOddVals(string barcode)
{
    int cumulativeVal = 0;
    for (int i = 0; i < barcode.Length; i++)
    {
        if (i % 2 != 0)
        {
            MessageBox.Show(string.Format("i is {0}; barcode{0} is {1}", i, barcode[i]));
            cumulativeVal += Convert.ToInt16(barcode[i]);
        }
    }
    MessageBox.Show(string.Format("Odd total is {0}", cumulativeVal));
    return cumulativeVal;
}

...返回“244”

我期待它返回“4”。

第一个消息框显示了我希望看到的内容,即“1”,然后是“0”三次,然后是“3”,我希望加起来为“4”,而不是“244”。

最佳答案

您在此处将数字 char 值转换为 int :

 cumulativeVal += Convert.ToInt16(barcode[i]); // Indexer on a string is a char

你想要什么......是将该数字的字符串表示形式转换为数字......而不是 char 值......所以添加 ToString() :
 cumulativeVal += Convert.ToInt16(barcode[i].ToString());

编辑:

或者,正如评论中指出的那样:
 cumulativeVal += Convert.ToInt16(barcode[i] - '0');

结果:4。

关于c# - 为什么 1 + 0 + 0 + 0 + 3 == 244?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18603271/

10-12 02:10