3

在 Java 中,我需要在0和之间随机生成一个数字0.06

我在这里看到另一个问题,以下代码可以解决问题:

Random generator = new Random();
double number = generator.nextDouble() * .06;

但是,这样做会给我很长的数字,比如0.007044013589130205and 0.03656588431980957,我认为这不是我的导师想要的。

无论如何生成0到0.06之间只有两位或三位小数的随机数?

4

4 回答 4

9

如果您想要一个介于 之间的数字[0 - 0.06]0.01您可以执行以下操作:

Random generator = new Random();
int number = generator.nextInt(7);
double result = number / 100.0;

您可以将公式推广到number = generator.nextInt(max - min + 1) + min;哪里max以及min将分别是您要生成的最高和最低数字。这将从 中生成一个数字[min to max+1]

要增加生成数字的小数位,只需将该数字除以 10 的适当幂(例如, 1000、10000、...)

于 2013-04-11T04:40:28.713 回答
4

在内部,Javadouble值是二进制浮点表示。它们没有小数位。您可以将双精度数格式化为具有指定小数位数的以 10 为底的数字字符串。例如,要获得三位小数(精度 0.001),您可以使用:

String formatted = String.format("%.3f", number);

如果您不需要对数字进行任何计算并且想要两位或三位小数,只需打印0.0一个介于 00 和 60(含)之间的两位随机整数。

于 2013-04-11T04:40:35.650 回答
3

我假设您需要精度为0.001,所以试试这个:

    Random r = new Random();
    int ret = r.nextInt(60 + 1);
    return ret / 1000.0;

这将平均生成 [0,0.060] ,差异倍数为 0.001,这可能是您想要的

于 2013-04-11T04:50:57.263 回答
1

由于您正在处理销售税,您应该知道为什么不使用 Double 或 Float 来表示货币?使用 BigDecimal 处理货币

要生成具有BigDecimal范围和有效数字# 约束的随机数,请参阅如何在 Java 中创建随机 BigDecimal?

于 2013-04-11T04:45:14.433 回答