取模运算(%)实际上相当于求余数,例如m%n,就是i除以n的余数,得到的值的大小只可能在0到n-1这个范围内,不可大于等于n。其中n叫做操作数。在java中不仅支持整数(int;short;long)取模运算,而且支持小数(float;double)及字节型的取模运算。另外不仅支持正数,还支持负数的取模运算(结果的符号总是与被除数的符号保持一致)。需要注意的是当除数大于被除数时,结果为除数的值(m%n 如果n>m,则结果等于m)
所以取模运算是相对余数来的。
在您的问题中,37.2%10,首先10 这个int类型进行类型提升,之后二者求余数,结果为7.200000000000003。当然你可以试一下让一个int类型整数对一个浮点数取模的结果,例如
int a = 8;
double b = 2.2;
System.out.println(a % b);
结果是1.3999999999999995
而
double a = 8.2;
int b = 2;
System.out.println(a % b);
结果是0.1999999999999993
我们再试一个:
short a = 7;
float b = 2;
System.out.println(a % b);
结果是1.0
所以取模运算的结果的类型要和参与取模运算的两个数中类型更高的那个一致。
对于其他类型的组合及有负数的取模运算,您可以试一下就有所体会了。呵呵,祝顺。
|