随机int函数

Lee*_*nes 5 java

有人可以解释为什么(int) (Math.random()*12-3)返回介于-2和8 (int) (Math.random()*12)-3之间的值,而返回介于-3和8之间?

不同之处在于括号的位置,但我不知道为什么它会产生影响的"引擎盖下".如果Math.random()可以返回的最低值为0,那么0*12 = 0并且两者最终都应该以-3结尾.我认为它与铸造到int和0.x到1有关.它只是(理论上)不可能达到0.00000000 ......?

GBl*_*ett 3

第一个可以回来-3,只是可能性很小。

Math.random():

返回带正号的双精度值,大于或等于 0.0 且小于 1.0。

因此,当您在内括号内有, 时(int) (Math.random()*12-3),结果将是一个 double,您可以将其转换为int。这会截断小数位,因此除非恰好Math.random() * 12返回0(然后减去 3 恰好得到 -3),, 将返回最低的,并且会被截断为 -2。Math.random() * 12 -32.{...}

当你这样做时:

(int) (Math.random()*12)-3
Run Code Online (Sandbox Code Playgroud)

转换的优先高于减法,因此更有可能被截断为0。然后减去三,得到-3