黑马程序员技术交流社区
标题:
关于%运算符的问题
[打印本页]
作者:
winsking
时间:
2013-9-28 16:23
标题:
关于%运算符的问题
本帖最后由 winsking 于 2013-9-29 18:13 编辑
System.out.println(37.2%10);
打印出来的结果是7.2 为什么不是7呢?
作者:
罗凯健
时间:
2013-9-28 16:53
因为JAVA支持浮点数的取模运算啊。。不是一定得是整数的。
没强制转换的话结果是float型的
作者:
黑马戴帅军
时间:
2013-9-28 17:02
取余运算符是“%”它是一个双目运算符,它的操作数通常是正整数也可以书负数甚至是浮点数,如果负数参与此运算,则需要特别注意,对于整数,java的取余运算规则如下
a%b=a-(a/b)*b
例如
5%3=5-(5/3)*3=2
5%-3=5-(5/-3)*-3=2
-5%3=-5-(-5/3)*3=-2
-5%-3=-5-(-5/-3)*-3=-2
如果操作数中有浮点数则采用的规则为
a%b=a-(b*q),这里q=int(a/b)
5.2%3.1=5.2-1*3.1=2.1
5.2%-3.1=5.2-(-1)*(-3.1)=2.1
-5.2%3.1=-5.1-(-1)*3.1=-2.1
-5.2%-3.1=-5.1-(-1)*(-3.1)=-2.1,如果没有声明数的类型会被强制转换float型。
希望对楼主有所帮助。
作者:
焦允
时间:
2013-9-28 17:04
37.2默认的是double类型,所以计算出来的结果一定是double类型的,若要想得到整数类型的除非你强转。
作者:
hanfei2511
时间:
2013-9-28 17:15
取模运算(%)实际上相当于求余数,例如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
所以取模运算的结果的类型要和参与取模运算的两个数中类型更高的那个一致。
对于其他类型的组合及有负数的取模运算,您可以试一下就有所体会了。呵呵,祝顺。
作者:
javamov
时间:
2013-9-28 17:16
结果取决于被模数也就是37.2
37.2是浮点数
那么37.2%10的结果也是浮点数
所以结果是7.2不是7(7是整数,7.0是浮点数)
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2