一、概述
在Java 中,我们可以使用除法运算符(/) 将左侧的值除以右侧的值。例如,int number = 10 / 5
。
在这个快速教程中,我们将探讨如何从整数除法运算中获得float
结果。
2. 问题介绍
首先,为简单起见,我们将在本教程中使用单元测试断言来验证计算结果。
我们可能已经意识到,当我们将除法运算符应用于像a/b 这样的两个整数时,它总是返回一个整数,即使a 不能被**b ,**
** a/b
a
**例如:
int i = 10 / 4; assertEquals(2, i);
如果我们运行测试,它就会通过。因此,10 / 4
产生2 而不是2.5
。而且,即使我们将计算结果赋给一个float
型变量,结果仍然是两个:
float x = 10 / 4; assertEquals(2, x);
那么接下来,让我们先了解一下为什么会出现这种情况,然后再弄清楚如何得到想要的float
结果,例如本例中的2.5。
3. 为什么Java中两个整数相除总是一个整数?
要了解为什么Java 中10 / 4 = 2,我们需要查看JLS(Java 语言规范)中的除法运算符部分,以了解除法运算符的行为是如何定义的。
首先,规范规定整数除法向零舍入。换句话说,两个整数的除法运算的结果只是商值。其余不包括在内。
因此,当我们计算10 / 4
时,我们得到2 而不是2.5。
接下来,让我们看看如果两个整数不可整除,如何得到预期的float
结果。
4. 如何使两个整数相除产生浮点数?
现在,我们已经了解了除法运算符如何处理两个整数。JLS 还在二进制数字提升中定义了原始操作数转换规则。
对*
、/
和%
运算符执行二进制数字提升。因此,除法运算遵循操作数转换规则。
那么接下来,让我们仔细看看操作数转换规则。
根据JLS,当我们计算a/b
时:
如果任一操作数是
double,
则另一个操作数将转换为double.
否则,如果任一操作数的类型为
float,
则另一个将转换为float.
否则,如果任一操作数是
long,
则另一个将转换为long.
否则,两个操作数都转换为
int.
根据上面的规则,如果我们想让a/b
操作的结果是一个float
,至少有一个操作数应该是float.
那么,接下来,让我们看看当我们将一个操作数转换为float
时,是否能得到预期的结果:
float x = (float) 10 / 4; assertEquals(2.5, x); float y = 10 / (float) 8; assertEquals(1.25, y);
如果我们试一试,上面的测试就通过了。因此,将任何操作数转换为float
会使除法产生float
结果。
0 评论