我想知道我是否能够设置我生成的随机双数的准确性。
Random generator = new Random();
double randomIndex = generator.nextDouble()*10000;
产生10000以内的随机数。 我怎样才能将精度设置为4?
答案 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个没有意义。