在使用charAt的java中的atoi

xon*_*rlz 6 java

我知道这样做的一个解决方案如下:

 String tmp = "12345";
      int result = 0;
      for (int i =0; i < tmp.length(); i++){
          char digit = (char)(tmp.charAt(i) - '0');
          result += (digit * Math.pow(10, (tmp.length() - i - 1)));

      }

      System.out.println(result);
Run Code Online (Sandbox Code Playgroud)

我不明白的原因是:

char digit = (char)(tmp.charAt(i) - '0');
Run Code Online (Sandbox Code Playgroud)

怎么能转换成数字?

Tom*_*Tom 13

char digit =(char)(tmp.charAt(i) - '0');

ASCII表,从字符'0''9'是连续的.因此,如果您知道tmp.charAt(i)将在0和之间返回一个字符9,那么减去0将从零返回偏移量,即该字符表示的数字.


Pet*_*rey 10

使用Math.pow是非常昂贵的,你最好使用Integer.parseInt.

您不必使用Math.pow.如果您的数字总是积极的,那么您可以做到

int result = 0;
for (int i = 0; i < tmp.length(); i++)
   result = result * 10 + tmp.charAt(i) - '0';
Run Code Online (Sandbox Code Playgroud)


Kev*_*vin 7

char是一个整数类型,它将我们的字母映射到计算机可以理解的数字(参见ascii图表).字符串只是一个字符数组.由于数字是邻接于ASCII表示,'1' - '0' = 49 - 48 = 1,'2' - '0' = 50 - 48 = 2等.