3

このメソッドに値「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 回表示され、次に "3" が表示され、"244" ではなく "4" になると予想されます。

4

2 に答える 2

1

この行:

    Convert.ToInt16(barcode[i])

char値 ( barcode[i]) を に変換しますshortintただし、とにかくへの呼び出しの前に、文字値は暗黙的に に変換されるToInt16()ため、文字コードを同等の整数、つまりそれ自体に効果的に変換しています。したがって'0'、48に変換されます。

あなたが望むのは次のようなものです:

    (barcode[i] - '0')

これは、すべての 10 進数文字 ( '0''9') に対して機能します。

警告

barcode[i]が 10 進数字でない場合、奇妙な結果が得られます。(とにかく、コードでこれをチェックする必要があります。)

于 2013-09-04T00:13:09.957 に答える