数学随机和小数



我真的很想理解,谢谢你的帮助。 我一直在看Derek Banas Java编程视频,我被困住了:

int randomNumber = (int) (Math.random() * 126) + 1;

目标是获得一个包含 1 到 126 的随机数。 它有效,但为什么?它怎么能输出126?

  • 如果转换 int 下降小数。

    126包含125(见测试)

  • 如果 Math.random() 返回 0 - 0.9(含)。

最接近的将是:

  1. int randomNumber = (int) (Math.random() * 126) + 1;
  2. 整数随机数 = (整数) (0.99 * 126) + 1;
  3. 整数随机数 = (整数) (124.74) + 1;
  4. 整数随机数 = (整数) 125.74;
  5. 整数随机数 = 125;

有人可以向我解释为什么我错了。

测试:

import java.util.*;
public class Random_Number_Test 
{
public static void main(String[] args) 
{
boolean Program_On_Going = true;
double RoundTest = 125.74;
while(Program_On_Going)
{
int randomNumber = (int) (Math.random() * 126) + 1;
if(randomNumber == 126)
{
System.out.print(randomNumber);
System.out.print("included");
Program_On_Going = false;
System.out.print((int) RoundTest);
}
else
{
System.out.println(randomNumber);
}
}
}
}

结果

18 30 101 77 101 85 87 6 89 26 20 115 108 13 53 30 85 108 41 110 22 3 38 106 46 102 117 95 36 44 65 87 87 4 114 70 8 120 50 28 60 97 101 25 30 96 4 105 55 29 20 77 105 91 19 81 105 66 1 78 81 48 77 82 11 68 113 1 7 90 104 96 100 70 114 14 125 42 108 16 119 103 70 84 83 42 15 102 45 69 80 123 56 39 115 88 70 111 30 68 19 34 17 24 71 107 81 76 42 80 123 19 54 47 96 58 64 52 61 117 64 103 47 40 60 35 23 90 75 91 29 16 7 15 20 50 85 72 109 85 108 47 54 79 91 102 84 101 5 17 50 115 115 71 67 83 15 99 77 101 20 79 22 25 30 108 46 75 89 80 103 51 61 15 91 9 61 90 11 5 27 36 116 15 14 105 5 95 53 97 55 59 1 81 97 109 77 37 3 84 115 87 15 40 93 61 68 14 93 15 38 55 15 72 48 103 75 42 63 64 61 114 103 17 47 31 102 56 57 113 82 85 48 1 120 117 25 77 101 19 84 54 101 102 2 14 114 105 20 57 70 94 7 27 123 108 109 47 4 28 72 49 86 84 64 86 71 69 33 110 109 19 71 92 49 50 77 29 31 55 62 75 61 8 52 115 69 39 71 107 42 57 92 88 56 88 89 7 123 49 13 107 6 99 21 29 49 3 82 60 104 70 123 91 4 14 57 63 27 126包括125

Math#random 状态的文档

返回一个带有正号、大于或等于 0.0 且小于 1.0 的双精度值。返回的值是伪随机选择的,从该范围内(大致)均匀分布。

因此,返回的值最多可以有16位小数。您的案例的一个例子是

(0.9920634920634921 * 126) + 1
125 + 1
126

问题是 Math.random() 不仅返回 0.99,还返回 0.9999999999

0.999999999 * 125 = 125.9999874

125.9999874 + 1 = 126.9999874

int 随机数 = (int) 126.9999874 ;

整数随机数 = 126;

最新更新