Java整数除法默认截断小数,需至少一个操作数为浮点类型(如5.0/2)才能得到小数结果;后续可用String.format、DecimalFormat或BigDecimal控制精度与舍入。

Java 中除法运算默认不保留小数,是因为整数相除会直接截断小数部分(即向零取整)。要保留小数,关键在于**至少有一个操作数是浮点类型(double 或 float)**,否则编译器按整数除法处理。
确保参与运算的是浮点数
整数相除(如 5 / 2)结果是 2,不是 2.5。必须让至少一个数带小数点或加类型后缀:
-
5.0 / 2→2.5(double除以int,结果为double) -
5 / 2.0→2.5 -
(double)5 / 2→2.5(强制类型转换) -
5f / 2→2.5f(float结果,精度较低)
控制小数位数(格式化输出)
得到浮点结果后,若需固定几位小数(如保留 2 位),不能靠四则运算本身,而要用格式化方法:
-
String.format("%.2f", 5.0 / 2)→"2.50"(返回字符串) -
System.out.printf("%.3f", 10.0 / 3);→ 输出3.333 -
DecimalFormat df = new DecimalFormat("#.##"); df.format(5.0 / 2);→"2.5"(注意:#.## 不补零,0.00 才补)
需要精确计算时用 BigDecimal
涉及金额或高精度场景,避免 double 的二进制浮点误差(如 0.1 + 0.2 != 0.3):
立即学习“Java免费学习笔记(深入)”;
- 构造用字符串:
new BigDecimal("5").divide(new BigDecimal("2"), 2, RoundingMode.HALF_UP)→2.50 - 指定小数位数和舍入模式(推荐
HALF_UP,即四舍五入) - 避免用
double构造:new BigDecimal(0.1)会产生不可控精度问题
常见错误提醒
以下写法看似保留小数,实则无效:
-
int result = 5 / 2;→ 仍是2,赋值前已截断 -
double result = 5 / 2;→ 先算整数除法得2,再转成2.0 -
Math.round(5.0 / 2)→ 得到long类型的3,不是小数形式
不复杂但容易忽略:先保证运算过程是浮点运算,再按需格式化或用 BigDecimal 精确控制。


















