有人可以解释为什么 (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...?
最佳答案
第一个可以返回-3
,只是可能性很小。
Returns a double value with a positive sign, greater than or equal to 0.0 and less than 1.0.
所以当你有 (int) (Math.random()*12-3)
时,在内括号内,结果将是一个 double ,你将其转换为 int
。这会截断小数位,所以除非 Math.random() * 12
返回 exactly 0(然后一旦减去 3 得到恰好 -3),Math .random() * 12 -3
,将返回最低的 2.{...}
,并将被截断为 -2。
当你这样做时:
(int) (Math.random()*12)-3
铸件更大precedence比减法,因此更有可能被截断为 0
。然后减去三,得到 -3
。
关于java - 随机整数函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53530062/