I would like to generate random numbers between 1 & 10, with a decimal place of 1
(e.g. 1.5, 9.4, 6.3, 2.9)
I would like to generate random numbers between 1 & 10, with 2 decimal places
(e.g. 1.51, 9.46, 6.32, 2.93)
I would like to generate random numbers between 1 & 10, with 3 decimal places
(e.g. 1.512, 9.346, 6.329, 2.935)
一种解决方案是为小数位置设置一个随机生成器,然后与数字连接。有没有更简单的方法来实现这一目标?
答案 0 :(得分:12)
虽然BigDecimal解决方案更灵活,但这是一个使用int和double的更简单的解决方案。此方法采用Random
对象,上限和下限以及多个小数位并返回相应格式的字符串:
/**
* Generate a decimal string representation of a random number within the
* supplied bounds.
*
* @param random
* the random object (if null, a new one will be created)
* @param lowerBound
* the lower bound, inclusive
* @param upperBound
* the upper bound, inclusive
* @param decimalPlaces
* the decimal places of the result
* @return the formatted string
*/
public static String getRandomValue(final Random random,
final int lowerBound,
final int upperBound,
final int decimalPlaces){
if(lowerBound < 0 || upperBound <= lowerBound || decimalPlaces < 0){
throw new IllegalArgumentException("Put error message here");
}
final double dbl =
((random == null ? new Random() : random).nextDouble() //
* (upperBound - lowerBound))
+ lowerBound;
return String.format("%." + decimalPlaces + "f", dbl);
}
测试代码:
final Random rnd = new Random();
for(int decpl = 0; decpl < 3; decpl++){
for(int low = 0; low < 2; low++){
for(int high = low + 1; high < low + 3; high++){
System.out.println("Random Value between " + low + " and "
+ high + " with " + decpl + " decimal places:");
System.out.println(getRandomValue(rnd, low, high, decpl));
}
}
}
<强>输出:强>
Random Value between 0 and 1 with 0 decimal places:
0
Random Value between 0 and 2 with 0 decimal places:
1
Random Value between 1 and 2 with 0 decimal places:
1
Random Value between 1 and 3 with 0 decimal places:
3
Random Value between 0 and 1 with 1 decimal places:
0.6
Random Value between 0 and 2 with 1 decimal places:
1.5
Random Value between 1 and 2 with 1 decimal places:
1.1
Random Value between 1 and 3 with 1 decimal places:
1.9
Random Value between 0 and 1 with 2 decimal places:
0.52
Random Value between 0 and 2 with 2 decimal places:
0.82
Random Value between 1 and 2 with 2 decimal places:
1.75
Random Value between 1 and 3 with 2 decimal places:
1.10
答案 1 :(得分:8)
1)
(int) ((Math.random() * 90) + 10) / 10.0
2)
(int) ((Math.random() * 900) + 100) / 100.0
3)
(int) ((Math.random() * 9000) + 1000) / 1000.0
答案 2 :(得分:5)
一个明显的建议是生成一个整数并适当地划分它。因此,对于3DP,您将生成一个介于1000和9999之间的数字(或10000,具体取决于您想要的精确边界),然后将其除以10000.
我建议您在实际除法中使用BigDecimal
,以准确保持小数。
答案 3 :(得分:3)
根据您的小数需要生成双倍格式