java - 随机整数函数

标签 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...?

最佳答案

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

Math.random() :

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/

相关文章:

java - 在 JavaFX WebView 加载页面之前显示加载图像

java - JSP自定义标签ClassNotFoundException

java - 在 LWJGL 中使用 glTexImage2D 和 ByteBuffer 时出现空纹理

java - 哪个是 mongodb 访问的最佳 java 驱动程序?

java - vert.x spring boot swagger 集成

java - 使用一个 HashMap 作为另一个 HashMap 的键

java - 使用 Java 8 实现递归 lambda 函数

java - 在 Android 中处理多个 Runnables()

java - 使用整数表示货币

java - 在此对象和其他对象上同步