将值“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” 。
答案 0 :(得分:10)
您正在将数字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。
答案 1 :(得分:1)
这一行:
Convert.ToInt16(barcode[i])
将char
值(barcode[i]
)转换为short
。但是,无论如何,在调用int
之前,字符值被隐式转换为ToInt16()
,因此它有效地将字符代码转换为其整数等价物,即自身。因此'0'
转换为48。
你想要的是这样的:
(barcode[i] - '0')
适用于所有十进制数字('0'
到'9'
)。
警告强>
如果barcode[i]
不是十进制数字字符,您将得到奇怪的结果。 (无论如何,你的代码应该检查这个。)