Java 中 Math.ceil(0.5) 返回 1.0 符合預期,但 Math.ceil(1/2) 卻返回 0.0。這是因為 1/2 發生了整數除法。
1 和 2 都是 int 字面量。int / int 結果仍為 int,向零截斷:1/2 = 0。Math.ceil(0) 接收 int 參數會隱式轉為 double,即 Math.ceil(0.0),返回 0.0。至少一個操作數為浮點數:
Math.ceil(1.0 / 2) // 1.0 是 double,結果 0.5 → ceil → 1.0
Math.ceil(1 / 2.0) // 同理
Math.ceil((double)1 / 2) // 顯式轉型
float 或 double。1.0、2.0f 等字面量標識浮點類型。Math.ceil、Math.floor)參數為 double,傳入整數會先隱式擴寬,但運算已在調用前完成。Math.ceil(1/2) 之所以返回 0.0,是因為整數除法 1/2 先算出 0,再傳給 ceil。只要讓除法在浮點域進行,即可得到預期的 1.0。