在Java中,我需要在0
和0.06
之间随机生成一个数字。
我在这里看到另一个问题,下面的代码可以解决这个问题:
Random generator = new Random();
double number = generator.nextDouble() * .06;
然而,这样做给了我很长的数字,如0.007044013589130205
和0.03656588431980957
,我认为这不是我的导师所期待的。
无论如何产生0到0.06之间只有两位或三位小数的随机数?
答案 0 :(得分:6)
你可以这样做,如果你想要你的数字范围在[0; 0.06]和差异0.01之间:
Random generator = new Random();
int number = generator.nextInt(7);
double result = number / 100.0;
您可以推广公式number = generator.nextInt(max + 1 -min) + min;
,其中max将是您生成的最大数字,最小值为min。这将从[min to max+1]
要增加小数位,您只需将数字除以1000,10000等等。
答案 1 :(得分:4)
在内部,Java double
值是二进制浮点表示。他们没有小数位。您可以格式化一个double作为具有指定小数位数的基数为10的数字字符串。例如,要获得三位小数(精度为0.001),您可以使用:
String formatted = String.format("%.3f", number);
如果您不需要对数字进行任何计算,并且您需要两个或三个小数位,则只需打印0.0
,然后打印00到60(包括)之间的两位数随机整数。
答案 2 :(得分:3)
我认为你需要精确度 0.001 ,所以试试这个:
Random r = new Random();
int ret = r.nextInt(60 + 1);
return ret / 1000.0;
这将产生[0,0.060] 平均,差异倍数为0.001,这可能是您想要的
答案 3 :(得分:1)
由于您正在处理销售税,因此您应该了解Why not use Double or Float to represent currency?和Using BigDecimal to work with currencies
要生成包含范围和有效数字的约束的随机BigDecimal
,请参阅How can I create a random BigDecimal in Java?