在java中设置随机数的准确性?

时间:2013-11-17 22:23:00

标签: java random floating-accuracy

我想知道我是否能够设置我生成的随机双数的准确性。

Random generator = new Random();
double randomIndex = generator.nextDouble()*10000;

产生10000以内的随机数。 我怎样才能将精度设置为4?

5 个答案:

答案 0 :(得分:2)

         Random generator = new Random();
         double randomIndex = generator.nextDouble()*10000;            
         randomIndex=Math.floor(randomIndex * 10000) / 10000;//this is the trick

答案 1 :(得分:2)

有几件事。首先,你的意思是“精确”,而不是“准确性”。其次,你需要澄清为什么你想要这样做,因为正确的答案将取决于它。

如果您只想显示具有该精度的数字,那么这是一个格式化问题。你可以使用,例如System.out.printf("%.4f", value)String.format()

如果你试图以这种精度生成数字,你可以通过做类似的事情来近似(为了简单起见,向左舍入):

double value = (int)(generateor.nextDouble() * 10000.0) / 10000.0;

或者,如果您希望范围为0-10000而不是0-1:

double value = (int)(generateor.nextDouble() * 100000000.0) / 10000.0;

由于存储浮点数的方式,它不会完全,但它可能足够接近您的目的。如果您需要精确,您可能希望存储为整数,例如:

int value = (int)(generator.nextDouble() * 10000.0);

然后你可以在内部进行操作,并显示为:

System.out.printf("%.4f", value / 10000.0);

如果您希望范围为0-10000,请调整上面的乘法因子。

如果您只是尝试在[0,10000)中生成数字,则可以使用指定范围的Random.nextInt(int),或者只是将值转换为int,如上所述(可选择舍入)

答案 2 :(得分:1)

如果您想要小数点后的4位数,您只需执行以下操作:

Random generator = new Random();
double randomIndex = Math.floor(generator.nextDouble()*10000 * 10000) /10000;

答案 3 :(得分:1)

Random generator = new Random();
double randomIndex = Double.parseDouble(new DecimalFormat("##.####")
                .format(generator.nextDouble() * 10000));

答案 4 :(得分:1)

简单地

double result = generator.nextLong() / 10000.0;

请注意,每当你点击一个双关语中无法表示的数字时,你永远无法确定该数字是否正好有4位小数。

无论如何,要求是愚蠢的,因为double只是没有小数位。因此,要求其中4个没有意义。