为什么输出结果总是后面加上的数?

SzMing 2016-02-18 04:12:14
System.out.println((int)Math.random()*3+2)
为什么输出的总是2?(输出结果总是后面加上的数)
...全文
288 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhy934453950 2016-02-19
  • 打赏
  • 举报
回复
强转精度问题和运算符优先级的问题,我刚看到这条代码我也有点蒙圈,看第二遍才懂了
永哥威武 2016-02-19
  • 打赏
  • 举报
回复
引用 10 楼 windowsoahil 的回复:
[quote=引用 9 楼 ldy13024770810 的回复:] [quote=引用 8 楼 zhy934453950 的回复:] 强转精度问题和运算符优先级的问题,我刚看到这条代码我也有点蒙圈,看第二遍才懂了
正解, Math.random() 返回带正号的double值 0.0 ~1.0之间, 如果Math.random()<0.5 则你在强制转换的时候就会丢失精度。 Math.random() 执行了四舍五入 结果为0,因此你的计算结果例:System.out.println(0*3+2) 结果为0; 如果你程序执行千百遍那么总会出现等于5的结果。[/quote]强转整数不是四舍五入,是去尾取整[/quote] 正解,此处强转整数是去尾取整
解开者 2016-02-19
  • 打赏
  • 举报
回复
引用 9 楼 ldy13024770810 的回复:
[quote=引用 8 楼 zhy934453950 的回复:] 强转精度问题和运算符优先级的问题,我刚看到这条代码我也有点蒙圈,看第二遍才懂了
正解, Math.random() 返回带正号的double值 0.0 ~1.0之间, 如果Math.random()<0.5 则你在强制转换的时候就会丢失精度。 Math.random() 执行了四舍五入 结果为0,因此你的计算结果例:System.out.println(0*3+2) 结果为0; 如果你程序执行千百遍那么总会出现等于5的结果。[/quote]强转整数不是四舍五入,是去尾取整
永哥威武 2016-02-19
  • 打赏
  • 举报
回复
引用 8 楼 zhy934453950 的回复:
强转精度问题和运算符优先级的问题,我刚看到这条代码我也有点蒙圈,看第二遍才懂了
正解, Math.random() 返回带正号的double值 0.0 ~1.0之间, 如果Math.random()<0.5 则你在强制转换的时候就会丢失精度。 Math.random() 执行了四舍五入 结果为0,因此你的计算结果例:System.out.println(0*3+2) 结果为0; 如果你程序执行千百遍那么总会出现等于5的结果。
pure_not_fool 2016-02-18
  • 打赏
  • 举报
回复
java中强制类型转换的优先级比 * 和 / 运算符的优先级高,所以你的程序 Math.random()取值为0-1之间[0,1)包含0 不包含1 ,按照优先级是先强转为整形0,0*3+2 == 0。
  • 打赏
  • 举报
回复
引用 5 楼 neversaygodbye 的回复:
(int)(Math.random()*3)+2 这样结果就不一样了
neversaygodbye 2016-02-18
  • 打赏
  • 举报
回复
(int)(Math.random()*3)+2 这样结果就不一样了
kahnyy5202015 2016-02-18
  • 打赏
  • 举报
回复
Math.random()取值为0-1之间[0,1)包含0 不包含1 (int)Math.random()*3+2 先执行(int)Math.random()=0 再执行0*3=0 最后执行0+2=2
大道如海 2016-02-18
  • 打赏
  • 举报
回复
new Random().nextInt(3) + 2
小五丶 2016-02-18
  • 打赏
  • 举报
回复
一楼对的,你要把Math.random()*3+2再括号包起来,结果就不会一直是2了
ghostkngiht 2016-02-18
  • 打赏
  • 举报
回复
Math.random()取值为0-1之间,然后再转成整数就是0,所以你的表达式相当于0*3+2,结果一直时2.

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧