如何生成随机数,这将在分裂时提供适当的结果

Joe*_*Joe 5 java math decimal

如何生成随机数,这些随机数将在除法上提供正确的结果(即结果应该舍入到小数点后的1或2位).

(例如,提供小数结果的十进制数的整数 - 我在下面给出了一组样本输入)

2827 by 2.5 = 1130.8
1747 by 0.8 = 2183.75
425 by 0.4 = 1062.5
935 by 0.8 = 1168.75
Run Code Online (Sandbox Code Playgroud)

Pet*_*rey 3

值得注意的是,所有整数都可以除以 0.4、0.8 或 2.5,并表示为小数点后两位。这是因为它与乘以 2.5、1.25 和 0.4 相同


但是,如果您的除数不成立,则可以在循环中执行此操作。

double divisor = 2.4;
double factor = 100/divisor;
Random rand = new Random();
int maxValue = 1000;
double ERROR = 1e-14*maxValue;

for(int i=0;i<100;i++) {
long randNum;
do {
   randNum = rand.nextInt(maxValue+1);
    if (Math.abs(randNum * factor - (long) (randNum * factor)) > ERROR)
        System.out.println("reject "+randNum + " => "+randNum/divisor);
} while(Math.abs(randNum * factor - (long) (randNum * factor)) > ERROR);
System.out.println(randNum + " => "+randNum/divisor);
Run Code Online (Sandbox Code Playgroud)

印刷

729 => 303.75
285 => 118.75
84 => 35.0
123 => 51.25
999 => 416.25
75 => 31.25
reject 727 => 302.9166666666667
reject 842 => 350.83333333333337
504 => 210.0
reject 368 => 153.33333333333334
441 => 183.75
579 => 241.25
165 => 68.75
Run Code Online (Sandbox Code Playgroud)

这将生成随机数,直到您得到的数字是 0.01 的倍数。

  • 好吧,@Joe 没有澄清问题。因此,我开始对他投反对票。我们在这里工作了一小时又一小时,日复一日,年复一年,他已经失去了兴趣? (2认同)