使用 String.format() 或 DecimalFormat(推荐)
适用于格式化输出(如显示给用户),但返回的是字符串类型。

示例代码:
double num = 3.4567;
// 使用 String.format()
String formattedNum = String.format("%.2f", num);
System.out.println(formattedNum); // 输出: 3.46
// 使用 DecimalFormat
import java.text.DecimalFormat;
DecimalFormat df = new DecimalFormat("#.00");
String formattedNum2 = df.format(num);
System.out.println(formattedNum2); // 输出: 3.46
使用 Math.round()(适用于数值计算)
直接对数值进行四舍五入,返回 long 或 double 类型。
示例代码:
double num = 3.4567; // 四舍五入到两位小数(先乘100,再round,再除以100) double roundedNum = Math.round(num * 100.0) / 100.0; System.out.println(roundedNum); // 输出: 3.46
注意:
- 如果输入是负数,
Math.round()也能正确四舍五入(如-3.4567→-3.46)。 - 这种方法会改变原始数值类型(如
double→long或double)。
使用 BigDecimal(高精度计算,推荐用于金融场景)
避免浮点数精度问题,适合需要高精度的场景(如货币计算)。
示例代码:
import java.math.BigDecimal; import java.math.RoundingMode; double num = 3.4567; // 先转为 BigDecimal,再设置舍入模式 BigDecimal bd = new BigDecimal(num).setScale(2, RoundingMode.HALF_UP); double roundedNum = bd.doubleValue(); System.out.println(roundedNum); // 输出: 3.46 // 直接格式化为字符串(避免精度问题) String formattedBd = bd.toString(); System.out.println(formattedBd); // 输出: 3.46
优点:

- 避免浮点数精度问题(如
1 + 0.2的误差)。 - 支持多种舍入模式(如
HALF_UP、HALF_DOWN等)。
使用 printf(直接控制台输出)
适合直接打印结果,不改变原始变量。
示例代码:
double num = 3.4567;
System.out.printf("%.2f%n", num); // 输出: 3.46
总结对比
| 方法 | 返回类型 | 适用场景 | 注意事项 |
|---|---|---|---|
String.format() |
String | 格式化输出(如显示给用户) | 返回字符串,需手动转数值 |
DecimalFormat |
String | 格式化输出(本地化支持好) | 返回字符串,需手动转数值 |
Math.round() |
double/long | 数值计算(需要数值类型) | 直接修改数值,可能丢失精度 |
BigDecimal |
BigDecimal/double | 高精度计算(如金融) | 最安全,但代码稍复杂 |
printf |
void | 直接控制台输出 | 不改变原始变量 |
推荐选择
- 简单格式化输出 →
String.format()或DecimalFormat。 - 数值计算 →
Math.round()或BigDecimal(推荐后者)。 - 避免浮点数误差 → 优先用
BigDecimal。
根据你的需求选择最合适的方法!

