上一篇
在Java中,取小数点前两位可通过以下步骤实现:先将数字转为
BigDecimal获取整数部分,再转为字符串截取前两位,若整数部分不足两位,则取全部;若原数为负数且整数部分非零,结果前添加负号;整数部分为零则返回”0″。
如何高效截取小数点前两位(整数部分前两位)
在Java中,“取小数点前两位”通常指截取数字整数部分的前两位数字,对数字56,截取前两位得到12,以下是详细实现方案及注意事项:
字符串截取法(推荐简单场景)
直接转换为字符串,截取整数部分的前两位:
public class Main {
public static void main(String[] args) {
double number = 1234.567;
// 转换为字符串并分割整数部分
String numStr = String.valueOf(number);
String intPart = numStr.split("\.")[0]; // 获取整数部分
// 截取前两位(不足两位时直接返回)
String firstTwo = intPart.length() > 2
? intPart.substring(0, 2)
: intPart;
System.out.println("截取结果: " + firstTwo); // 输出: 12
}
}
优点:代码简洁,易于理解。
缺点:涉及字符串操作,性能略低。
数学运算法(高效精确)
通过数学计算获取整数部分前两位:
public class Main {
public static void main(String[] args) {
double number = 1234.567;
int intPart = (int) Math.abs(number); // 取整数部分(绝对值避免负数问题)
// 循环除以10直到剩余两位数(如1234 → 123 → 12)
while (intPart >= 100) {
intPart /= 10;
}
System.out.println("截取结果: " + intPart); // 输出: 12
}
}
优点:纯数值计算,性能高。
缺点:需额外处理负数和零。

格式化输出法(需字符串结果)
利用String.format提取整数部分前两位:
public class Main {
public static void main(String[] args) {
double number = 1234.567;
long intPart = (long) Math.abs(number);
String result = String.format("%02d", intPart).substring(0, 2);
System.out.println("截取结果: " + result); // 输出: 12
}
}
适用场景:需要固定两位输出(不足补零),如2 → 05。
关键注意事项
-
负数处理:
使用Math.abs()获取绝对值,避免负号干扰:
double negativeNum = -1234.56; int intPart = (int) Math.abs(negativeNum); // 得到1234
-
整数部分不足两位:
- 字符串法:自动返回全部数字(如
3→"5")。 - 数学法:直接保留原值(如
3→5)。 - 需补零时用
String.format("%02d", num)。
- 字符串法:自动返回全部数字(如
-
大数溢出问题:
超出int范围(约21亿)时,改用long类型:long bigNum = 3_000_000_000L; // 30亿 while (bigNum >= 100) bigNum /= 10; // 结果:30
常见疑问解答
Q:如何保留小数点后两位(如12.34)?
A:这是不同需求,使用以下方法:

double num = 12.3456;
String formatted = String.format("%.2f", num); // 输出:12.35(四舍五入)
Q:为什么不用BigDecimal?
A:BigDecimal适合精确小数计算,但截取整数前两位属于简单操作,上述方法更高效。
| 方法 | 适用场景 | 性能 |
|---|---|---|
| 字符串截取法 | 快速实现,数字较小 | 中等 |
| 数学运算法 | 高性能需求,大数处理 | 高 |
| 格式化输出法 | 需固定两位显示(不足补零) | 中等 |
根据实际场景选择方法,并注意处理负数、零和边界值问题,即可准确获取小数点前两位数字。
引用说明:本文代码基于Java 17语法,数学原理参考IEEE 754标准,字符串操作遵循Java SE官方文档。
