函数中有一行计算两位数的和。
我用以下语法求和:
.map((selectedSectionPks: MasterSection.SectionInfo) =>
`${selectedSectionPks.Id}${selectedSectionPks.size}`);
将索引0上的数字乘以2。
sum += get2DigitSum((acctNumber[0] - '0') * 2);
让我们说索引0上有9。如果我有public static int get2DigitSum(int num)
{
return (num / 10) + (num % 10);
,它将acctNumber[0] - '0'
传递给另一个函数。但是,如果我在{之后没有9
{1}}通过- '0'
。我不明白为什么不使用acctNumber[0]
也会得到错误的结果。
答案 0 :(得分:2)
文本“ 0”和数字0完全不等于计算机。
字符“ 0”实际上具有ASCII数字48(或十六进制为0x30),因此要将字符“ 0”转换为数字0,您需要减去48-在C语言和基于该语言的大多数语言中,可以写为减去字符“ 0”,该字符的数值为48。
妙处在于,字符“ 1”的ASCII码为49,所以减去数字48(或字符“ 0”)得出49-48 = 1,依此类推。
因此重要的部分是:计算机不仅对数据(机器某些部分的位模式)敏感,而且对数据的解释敏感-在您的情况下,将其解释为文本并将ist解释为数字不一样,但相差48,您需要通过减法消除它。
答案 1 :(得分:2)
因为您要向acctNumber[0]
提供get2DigitSum
。
get2DigitSum
接受一个整数,但是acctNumber[0]
不是整数,它包含一个char
,它代表一个带有整数值的字符。
因此,您需要减去0以获取整数。 “ 0”至“ 9”的ASCII值为48至57。
当您减去两个char
值时,实际上会减去ASCII值。这就是为什么,您需要减去“ 0”
答案 2 :(得分:1)
内部所有字符均以数字表示。仅在显示期间,然后转换为精美象形图的数字。
现在,数字0-9是ASCII代码48-57。基本上,它们偏移+48。超过57岁时,您会发现英文字母的大小先后变小。在此之前,各种运算符甚至一堆无法打印的字符。
通常,您根本不会做这种数学运算。您可以将整个字符串输入Parse()或TryParse()函数中,然后使用已解析的数字。在某些情况下,您不会这样做,而坚决反对“带有字符的数学”: