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 不需要其他操作。
我想使用 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 不需要其他操作。