我想使用Java随机生成0到2.10之间的价格。我希望价格的格式为0.00,0.10,0.20,0.30,0.40,0.50 ...... 1.10,1.20一直到2.10。我的代码是这样的:
private static DecimalFormat df2 = new DecimalFormat(".##");
double min = 0;
double max = 2.10;
double diff = max - min;
double randomValue = min + Math.random( ) * diff;
System.out.println(df2.format(randomValue));
然而,它打印出的值如.06,1.0,.99,。02等。无论如何要格式化吗?
答案 0 :(得分:2)
你可以让它生成以0结尾的数字:
public static void main(String[] args){
DecimalFormat df2 = new DecimalFormat("0.0");
double min = 0.00;
double max = 2.10;
double rand = new Random().nextDouble();
String result = df2.format(min + (rand * (max - min))) + "0";
System.out.println(result);
}
它只是将小数舍入到第十位,然后将0
添加到输出中,生成所需的数字。
以下是输出的一些示例:
1.90
1.50
0.70
2.10
1.40
1.10
0.10
0.00
0.60
答案 1 :(得分:2)
正如我在评论中所说,通过将randomValue结果乘以10,然后对其应用Math.floor(),然后最后划分上一步中获得的结果,可以很容易地实现。< / p>
注意:(在评论部分,我的手指在结尾处输入了额外的0!我已删除了评论)
工作代码为:
// use the correct pattern #0.00
DecimalFormat formatter = new DecimalFormat("#0.00"); // edited here.
double randomValue = min + Math.random( ) * diff;
double tempRes = Math.floor(randomValue * 10);
double finalRes = tempRes/10;
System.out.println(formatter.format(finalRes));
答案 2 :(得分:2)
我有另一个简单的解决方案,也许这是最简单的解决方案?以这种方式思考:0.00,0.10,0.20 ...... 2.10,实际上你只需要生成从0(包括)到22(不包括)的随机整数然后除以10.然后你可以使用结果来格式化
例如,您拥有的随机数是18,然后结果是1.8,那么您可以将其格式化为1.80;
Random rand = new Random();
System.out.printf("%.2f%n", rand.nextInt(22) / 10.0);
同样的逻辑,如果你想要最小间隙为0.01的价格,你可以生成从0(含)到211(不包括)的随机数并除以100;
处理0时无需其他操作。
答案 3 :(得分:1)
很抱歉没有仔细阅读。
private static DecimalFormat df2 = new DecimalFormat("#.#");
...
System.out.println(df2.format(randomValue) + "0");