You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ToString与索引器的工作原理及数字首字符获取问题解决

为什么age.ToString()[0]返回52,以及如何获取正确的首位数字?

嘿,这个问题挺典型的,我来给你拆解清楚~

先说说为什么得到52

咱们一步步拆解你的代码逻辑:

  1. age.ToString():int类型的ToString()方法会把数字转换成对应的字符串形式,所以47会变成字符串"47"。
  2. [0]索引器:字符串的索引器返回的是对应位置的Char类型值,这里就是字符'4'。
  3. 赋值给int变量:当你把Char类型的'4'直接赋值给int变量时,C#会自动把字符的UTF-16编码值转换成整数。而字符'4'的ASCII(也是UTF-16)编码正好是52,所以最终firstDigit的值就是52啦。

简单说,你拿到的不是数字4的数值,而是字符'4'的编码值。

怎么获取正确的首位数字4?

这里有两种常用的方法,按需选择就行:

方法一:从字符转换为数字

既然拿到的是字符'4',咱们把它转换成对应的数字即可,有两种简单方式:

  • 用char.GetNumericValue()方法直接获取字符对应的数值:
int age = 47;
int firstDigit = (int)char.GetNumericValue(age.ToString()[0]);
Console.WriteLine($"firstDigit: {firstDigit}");
  • 利用字符编码的规律:字符'0'的编码是48,所有数字字符的编码都是连续的,所以用目标字符减去'0'就能得到对应的数字:
int age = 47;
int firstDigit = age.ToString()[0] - '0';
Console.WriteLine($"firstDigit: {firstDigit}");

方法二:用数学运算(不转字符串)

如果不想通过字符串转换,直接用数学方法也能拿到首位数字:

int age = 47;
int firstDigit = age;
// 不断除以10,直到数字小于10,剩下的就是首位数字
while (firstDigit >= 10)
{
    firstDigit /= 10;
}
Console.WriteLine($"firstDigit: {firstDigit}");

这两种方法都能得到你想要的结果4~

内容的提问来源于stack exchange,提问作者Jarne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 09:12:53