Java随机生成两种十进制格式的价格

时间:2017-07-24 03:22:01

标签: java random format decimalformat

我想使用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等。无论如何要格式化吗?

4 个答案:

答案 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");