Java 随机生成两位小数格式的价格

Java random generate price in two decimal format

我想使用 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 等值。是否可以对其进行格式化?

抱歉没仔细看

private static DecimalFormat df2 = new DecimalFormat("#.#");
...
System.out.println(df2.format(randomValue) + "0");

您可以像这样让它生成以 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

正如我在评论中所说,这很容易实现,方法是将 randomValue 结果乘以 10,然后对其应用 Math.floor(),最后除以上一步中获得的结果即可给你。

注意:(在评论部分,我的手指在最后多输入了一个 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));

我有另一个简单的解决方案,也许它是最简单的?可以这样想: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 不需要其他操作。