您的位置:首页 >charAt提取数字转整数方法详解
发布于2026-04-15 阅读(0)
扫一扫,手机访问

charAt() 返回的是 Unicode 码点(如 '0' 对应 48),直接赋值给 int 会导致得到 ASCII 值而非数字本身;需通过 Character.digit() 或 Integer.parseInt() 显式转换为数值。
`charAt()` 返回的是 Unicode 码点(如 `'0'` 对应 48),直接赋值给 `int` 会导致得到 ASCII 值而非数字本身;需通过 `Character.digit()` 或 `Integer.parseInt()` 显式转换为数值。
在 Java 中,String.charAt(int index) 方法返回的是指定位置的 char 类型字符。但当你将其直接赋值给一个 int 变量(例如 int base = str.charAt(i);),Java 会自动进行隐式类型提升——将 char 按其 Unicode 码点值(即 ASCII 值)转为 int。因此,当 str = "30" 且 i = 0 时,str.charAt(0) 返回字符 '3',其 Unicode 值为 51,于是 base 被赋值为 51,而非期望的数字 3。
这是初学者在实现如“水仙花数(Armstrong 数)”等字符串数字处理逻辑时常见的误区。要真正获取字符所表示的十进制数字值,推荐以下两种安全、高效的方式:
int base = Character.digit(str.charAt(i), 10);
char c = str.charAt(i);
if (!Character.isDigit(c)) {
throw new IllegalArgumentException("Invalid digit character: " + c);
}
int base = Character.digit(c, 10);int base = Character.getNumericValue(str.charAt(i));
虽然可行,但存在明显缺陷:
private static boolean isArmstrong(int number) {
String str = Integer.toString(number);
int len = str.length();
long sum = 0; // 使用 long 避免 int 溢出
for (int i = 0; i < len; i++) {
int digit = Character.digit(str.charAt(i), 10);
sum += (long) Math.pow(digit, len); // 注意:Math.pow 返回 double,建议用自定义幂函数或 BigInteger 提升精度
}
return sum == number;
}关键提醒:
- Math.pow(int, int) 返回 double,强制转 long 可能因浮点误差导致精度丢失(如 Math.pow(9, 10) 在某些 JVM 上可能为 3486784400.999...),生产环境建议改用整数幂运算(如循环乘法或 BigInteger.pow());
- 原代码中 result=+Math.pow(...) 实为 result = +Math.pow(...)(即赋值而非累加),应改为 result += ...;
- 外层循环中 number < parameter + 1 等价于 number <= parameter,语义更清晰。
掌握 char 到数字的正确转换方式,是编写健壮字符串数值处理逻辑的基础一步。
上一篇:财务软件添加采购发票步骤详解
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9