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

Java随机生成两位十进制格式的价格,java,random,format,decimalformat,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

我想使用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");

对不起,没有仔细阅读

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

您可以使其生成以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

正如我在评论中所说的,将随机值结果乘以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));

正如我在评论中所说的,将随机值结果乘以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不需要其他操作。

我有另一个简单的解决方案,也许它是最简单的一个?这样想: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



处理0s不需要其他操作。

Nope不起作用。我仍然看到一些值,如.03、.07等。如果您希望所有随机值都是0.10的倍数,然后生成一个随机整数,然后将其乘以0.10或除以10。查看Random类以获得生成随机整数的方法。Nope不起作用。我仍然看到一些值,如.03、.07等。如果您希望所有随机值都是0.10的倍数,然后生成一个随机整数,然后将其乘以0.10或除以10。查看Random类以获得生成随机整数的方法。我得到了.20…这是OP想要的。我想要0.00、0.10、0.20、0.30、0.40、0.50…等格式的价格。@JohnJoe我编辑了我的帖子。@CodingNinja嘿,在后面添加0有一些问题。我得到了一些随机值,比如20,30 etcI get.20…这是OP想要的。我想要的价格格式是0.00,0.10,0.20,0.30,0.40,0.50…@JohnJoe我编辑了我的帖子。@CodingNinja嘿,在后面加上0有点问题。我得到一些随机值,比如20,30等等,但这给了我一个小数点,即使我加上了小数点格式。是的,我做了,但不知怎么的,它仍然给了我一个小数点。有什么想法吗?@DeniseTan-我希望我的回答能有所帮助,而且是最简单的。在应用DecimalFormat0.00时,您需要使用正确的模式,请检查。非常感谢!它工作!!!但这给了我一个小数点,即使我加了十进制格式。是的,我加了,但不知怎么的,它仍然给了我一个小数点。有什么想法吗?@DeniseTan-我希望我的回答能有所帮助,而且是最简单的。在应用DecimalFormat0.00时,您需要使用正确的模式,请检查。非常感谢!它工作!!!在这种情况下,是否不使用printf?因为我将使用System.out格式化输出。println@DeniseTan我可以知道有什么理由这样做吗?因为printf中的%n代表println中的ln新行,所以可以使用String.format,它使用与printf相同类型的格式字符串,但不打印任何内容。如@ajb所说,您可以使用string.format格式化字符串,并将其与System.out.println一起使用。在这种情况下是否不使用printf?因为我将使用System.out格式化输出。println@D
我可以知道有什么理由这样做吗?因为printf中的%n代表println中的ln新行,所以可以使用String.format,它使用与printf相同类型的格式字符串,但不打印任何内容。如@ajb所说,您可以使用string.format格式化字符串,并将其与System.out.println一起使用