weixin_慕勒6034554
2020-02-18 15:18
最后那个40/9%5不是应该等于40/9吗,而且这还有小数,不是和前面的int向矛盾了吗
int m = 5;
int n = 7;
int x=(m*8/(n+2))%m;
因为之前规定的m和n是int,所以(m*8/(n+2))的结果也是int也就是4,
假如是这么写double x=(m*8/(n+2)),结果就是4.0,
假如是这么写double x=((double)m*8/(n+2)),结果就是4.444444444444445
40/9=4.44444444,这个结果在对5取余,得到的还是4.44444,但因为x是整型(int),所以不保留小数,也就是4。
1、Java中 数值运算时 / 你可以理解为 取商;
2、无论 a/b 结果时 4.4....... or 4.9....... 都只取整数部分,不会按四舍五入 运算结果为int型,并非浮点型,别把 主观思维加进来;
3、强中转换 一般只有在 赋值 运算时 用,赋值运算符 = 前后数据类型不一样时才用,否则编译报错,
代码中 int x = (m*8/(n+2)%m); x 的数据类型为int型,(m*8/9%m) 按优先级应从左往右计算,每一步运算结果和最终结果都是 int型,和变量 x类型一样,故不需要强制转换。
java 和 C 一样 用 / 这个符号就不是我们通常的除法,用这个 / 只能得到整数部分,和int定义没关系;
如果你用float定义,那结果就是4.00也不会是4.444444
int 取整 后面小数都去掉的,没矛盾
记错了,是4.44444444
这个取整就是对的,4.75,但是前面是int啊,int后面没有强制赋值的话,不是应该是有语病的吗
老哥,我也是新手,昨晚才开始学的那种新,有兴趣加个好友,一起讨论学习啊
刚刚我再算了下,是40/9,我怀疑是它题目错了,我也是新手,刚学,互相讨论哦
你应该是算错了吧,int x = ( m * 8 / ( n + 2 ) ) % m ;m=5;n=7;
这样算下来,前面是35,不是40,前面的数算错了,后面就会出错的哦;原题算下来的话,就是一个int类型的了,你再试试看哦
Java入门第一季(IDEA工具)升级版
1165523 学习 · 17586 问题
相似问题