2 回答
TA贡献1786条经验 获得超11个赞
问题在于,当您向下转换为 an 时, an可以容纳的int最大值是 10 位数字,因此它无法返回大于该数字的数字。int2147483647
所以你需要让这个领域成为debitCardNumber一个long:
private long debitCardNumber;
将代码更改为此以获取 12 位数字:
long min = (long)Math.pow(10, 11);
long max = (long)Math.pow(10, 12);
long debitCardNumber = ThreadLocalRandom.current().nextLong(min, max);
对于 4 位数字debitCardPin:
int debitCardPin = ThreadLocalRandom.current().nextInt(1000, 10000);
不需要将数字转换为long或int显式地存在一些方法,这些方法将在给定和值的情况下ThreadLocalRandom.current()给出相应类型的数字。使用此方法,您可以放心,您始终会得到介于(包含)和(不包含)之间的值。这将解决您的问题“但有时它会给我一个唯一的 3 位数随机数。”minmaxminmax
TA贡献1866条经验 获得超5个赞
问题是 int。它太小了(你这里有溢出)。
您可以尝试以下代码:
double rndValue = (ThreadLocalRandom.current().nextDouble() * Math.pow(10, 12));
DecimalFormat formatter = new DecimalFormat("##");
formatter.setRoundingMode(RoundingMode.DOWN);
String result = formatter.format(rndValue);
System.out.println(result);
添加回答
举报