在Java编程中,处理浮点数的小数部分是一个常见的需求,无论是为了显示格式化、数据计算还是业务逻辑实现,去掉小数点的方法多种多样,每种方法都有其适用场景和注意事项,本文将系统介绍几种主流的实现方式,包括类型转换、数学运算、字符串处理以及格式化输出,并分析各自的优缺点及适用场景。

类型转换法:直接截断小数部分
最直接的方法是通过类型转换将浮点数转换为整数类型,Java会自动截断小数部分,这种方法简单高效,但需要注意数据溢出和精度丢失的问题。
double num = 3.14159; int result = (int) num; // 结果为3
特点:
- 优点:代码简洁,执行效率高,适用于不需要四舍五入的场景。
- 缺点:直接截断,不进行四舍五入;可能因数值超出整数范围导致溢出。
- 适用场景:对精度要求不高,且数值范围在Integer或Long类型范围内的场景。
扩展:对于大数值,可以使用long类型转换:
double largeNum = 123456789012.345; long longResult = (long) largeNum; // 结果为123456789012
数学取整法:四舍五入与方向取整
Java提供了Math类中的多种取整方法,可以实现更灵活的小数处理。
四舍五入
Math.round()方法会将浮点数四舍五入到最接近的整数,返回类型为long或int。
double num = 3.6; long rounded = Math.round(num); // 结果为4
注意:对于float类型,Math.round()返回int;对于double类型,返回long。
向下取整
Math.floor()返回不大于参数的最大整数,结果为double类型。

double num = 3.9; double floored = Math.floor(num); // 结果为3.0
向上取整
Math.ceil()返回不小于参数的最小整数,结果为double类型。
double num = 3.1; double ceiled = Math.ceil(num); // 结果为4.0
特点:
- 优点:支持四舍五入和方向取整,精度控制更灵活。
- 缺点:
Math.floor()和Math.ceil()返回的是double类型,可能需要额外转换。 - 适用场景:需要精确控制取整方向(如财务计算中的向上取整)或四舍五入的场景。
字符串处理法:格式化输出与截取
通过将数字转换为字符串,可以灵活控制小数部分的显示或去除。
使用String.format()
double num = 3.14159;
String formatted = String.format("%.0f", num); // 结果为"3"
int result = Integer.parseInt(formatted);
说明:"%.0f"表示保留0位小数,自动四舍五入。
使用DecimalFormat
import java.text.DecimalFormat;
double num = 2.6789;
DecimalFormat df = new DecimalFormat("#");
String formatted = df.format(num); // 结果为"3"
int result = Integer.parseInt(formatted);
说明:表示任意数字,不强制显示小数部分,会自动四舍五入。
直接截断字符串
double num = 3.14159;
String str = Double.toString(num);
String[] parts = str.split("\\.");
int integerPart = Integer.parseInt(parts[0]); // 结果为3
特点:
- 优点:字符串处理方式直观,可以结合正则表达式实现复杂格式化。
- 缺点:性能较低,需要额外的类型转换,不适合高频计算场景。
- 适用场景:需要自定义数字格式(如保留特定小数位)或结合字符串操作的场景。
BigDecimal类:高精度计算与控制
对于需要高精度计算的场景,BigDecimal是最佳选择,它可以避免浮点数精度问题,并提供灵活的取模控制。

import java.math.BigDecimal; double num = 3.14159; BigDecimal bd = new BigDecimal(Double.toString(num)); BigDecimal rounded = bd.setScale(0, BigDecimal.ROUND_HALF_UP); // 四舍五入 int result = rounded.intValue(); // 结果为3
说明:
setScale(0, ...)表示设置小数位数为0。BigDecimal.ROUND_HALF_UP表示四舍五入模式,其他模式包括ROUND_DOWN(直接截断)、ROUND_UP(向上取整)等。
特点:
- 优点:高精度计算,避免浮点数误差,支持多种取整模式。
- 缺点:代码相对复杂,性能低于基本类型运算。
- 适用场景:财务计算、科学计算等对精度要求极高的场景。
综合对比与选择建议
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 类型转换 | 简单高效 | 截断小数,可能溢出 | 快速截断,数值范围小 |
| Math取整 | 支持四舍五入和方向取整 | 部分方法返回double类型 | 需要方向控制的取整 |
| 字符串处理 | 格式灵活,可自定义 | 性能低,需类型转换 | 格式化输出或复杂字符串操作 |
| BigDecimal | 高精度,多种取模模式 | 代码复杂,性能较低 | 财务、科学计算等高精度场景 |
选择建议:
- 快速截断:如果仅需简单截断小数且数值范围可控,使用
(int)或(long)转换。 - 四舍五入:需要四舍五入时优先使用
Math.round()。 - 格式化输出:如果需要控制数字显示格式(如保留N位小数),使用
String.format()或DecimalFormat。 - 高精度计算:涉及金额、统计等场景,务必使用
BigDecimal避免精度问题。
注意事项
- 浮点数精度问题:直接使用
double或float可能导致精度误差(如1 + 0.2 != 0.3),高精度场景应避免。 - 数据溢出:大数值转换为
int时可能溢出,建议先检查范围或使用long。 - 负数处理:
Math.floor()对负数会向负无穷方向取整(如Math.floor(-3.1)结果为-4.0),需注意业务逻辑是否符合预期。
通过合理选择上述方法,可以高效、准确地实现Java中去掉小数点的需求,实际开发中需根据具体场景权衡性能、精度和代码可维护性,选择最适合的解决方案。










