我编写了一些计算的东西(我在下面复制了一个非常简化的例子),比如 CASE2 并得到了不好的结果。像 CASE1 一样重构代码并且工作正常。我知道 CASE 2 中存在隐式转换,但不确定全部原因。任何人都可以向我解释下面到底发生了什么?
//CASE 1, result 5.5
double auxMedia = (5 + 6);
auxMedia = auxMedia / 2;
//CASE 2, result 5.0
double auxMedia1 = (5 + 6) / 2;
//CASE 3, result 5.5
double auxMedia3 = (5.0 + 6.0) / 2.0;
//CASE 4, result 5.5
double auxMedia4 = (5 + 6) / 2.0;
我的猜测是 CASE2 中的 /2 将 (5 + 6) 转换为 int 并导致除法轮数为 5,然后再次转换为 double 并转换为 5.0。
CASE3 和 CASE 4 也解决了这个问题。