A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© winsking 中级黑马   /  2013-9-28 16:23  /  1472 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 winsking 于 2013-9-29 18:13 编辑

System.out.println(37.2%10);
打印出来的结果是7.2   为什么不是7呢?

评分

参与人数 1黑马币 +3 收起 理由
乔兵 + 3

查看全部评分

5 个回复

正序浏览
结果取决于被模数也就是37.2
37.2是浮点数
那么37.2%10的结果也是浮点数
所以结果是7.2不是7(7是整数,7.0是浮点数)

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
取模运算(%)实际上相当于求余数,例如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
所以取模运算的结果的类型要和参与取模运算的两个数中类型更高的那个一致。
对于其他类型的组合及有负数的取模运算,您可以试一下就有所体会了。呵呵,祝顺。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
37.2默认的是double类型,所以计算出来的结果一定是double类型的,若要想得到整数类型的除非你强转。

评分

参与人数 1黑马币 +3 收起 理由
乔兵 + 3

查看全部评分

回复 使用道具 举报
取余运算符是“%”它是一个双目运算符,它的操作数通常是正整数也可以书负数甚至是浮点数,如果负数参与此运算,则需要特别注意,对于整数,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型。
希望对楼主有所帮助。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
因为JAVA支持浮点数的取模运算啊。。不是一定得是整数的。

没强制转换的话结果是float型的

评分

参与人数 1黑马币 +3 收起 理由
乔兵 + 3

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马