整数除法 vs 浮点除法
运算符
/
看的是
操作数的类型
:两端都是整数 → 整除截断;有一端是浮点 → 浮点除法
9
int
/
5
int
两端都是 int → 整数除法
1
1.8 的小数被
截断
舍弃小数,
不四舍五入
9.0
double
/
5
int
int 被提升为 5.0
有一端是 double → 浮点除法
1.8
保留小数,
真除法
9.0/5.0 同理
= 1.8
⚠ 经典陷阱:赋值类型骗不了运算
double x =
9 / 4 ;
第 ① 步
右边先算:9 与 4 都是 int
9 / 4 =
2
整除 → 已经丢掉 0.25
第 ② 步
整数 2 再转成 double 存入 x
x =
2.0
不是 2.25!转换救不回已丢的小数
✓ 正确:让运算时就带浮点
double x =
9.0
/ 4;
2.25
double x =
(double)
9 / 4;
2.25
static_cast<double>(a) / b (a, b 为 int 时)
▶ 重播