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

如何提取整数的前N位数字并保存为新的int类型值

问题说明

现有正整数编码,位数仅可能为以下4种:

  • 3位,例如123
  • 4位,例如1234
  • 7位,例如1234567
  • 8位,例如12345678

需按照规则提取前缀生成新的int类型值:

  • 7位编码保留前3位,例:1234567 -> 123
  • 8位编码保留前4位,例:12345678 -> 1234
  • 3位、4位编码无需处理,直接保留原值

你目前搭建的判断逻辑框架存在小瑕疵,原代码如下:

int number = 12345678;
if(number>9999999){ //if the number is codified on 8 ciphers
...
}else if(number>9999 && number<10000000){ \if the number is codified on 7 ciphers
...
}else{
...
}
实现方案

直接利用整数除法自动截断小数的特性即可实现需求,不需要做字符串转换,性能更高,逻辑也简单。
首先修正你原逻辑的两个问题:

  1. 7位整数的范围是1000000 ~ 9999999,原判断条件下限写为number>9999会误把5、6位数字判定为7位,导致计算错误
  2. 第二行注释前误写了反斜杠,需要改为//才符合Java语法

补全后的可运行代码如下:

int number = 12345678;
int result;
if (number >= 10000000) {
    // 8位数字,除以10000截断后4位,保留前4位
    result = number / 10000;
} else if (number >= 1000000) {
    // 7位数字,除以10000截断后4位,保留前3位
    result = number / 10000;
} else {
    // 3、4位数字直接返回原值
    result = number;
}

可以用测试用例验证结果:

  • 7位输入1234567:1234567 / 10000 = 123,符合要求
  • 8位输入12345678:12345678 / 10000 = 1234,符合要求
  • 3位输入123、4位输入1234:直接返回原值,符合要求

如果业务场景可能出现负数编码,只需要在处理前先取绝对值,计算完结果后补回负号即可。

注:也可以通过转字符串截取前缀再转回整数的方式实现,但整数运算没有额外的类型转换开销,性能更优,更推荐使用。字符串实现方式参考如下:

String numStr = String.valueOf(number);
int result;
if (numStr.length() == 8) {
    result = Integer.parseInt(numStr.substring(0,4));
} else if (numStr.length() ==7) {
    result = Integer.parseInt(numStr.substring(0,3));
} else {
    result = number;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:27:52