![](/img/trans.png)
[英]Converting a string of ten digits to integer or generating a 10 digit long random integer to create an account number in Java
[英]Last 3 digits always zero when generating 15-digit random number
我想使用Java生成一个介于1_000_0000_0000_000
和9_999_9999_9999_999L
之间的随机数,因此我使用了以下代码,
final long MAX_NUMBER = 9_999_9999_9999_999L;
final long MIN_NUMBER = 1_000_0000_0000_000L;
System.out.print(Long.valueOf(new Random().nextLong() *
(MAX_NUMBER - MIN_NUMBER)));
代码的问题在于,代码确实会生成15位数字的随机数,但最后3位数字始终为零,有时还会生成负数。
谁能告诉我为什么最后三位数字总是为零?
这是一些输出,
7160629848698886104000
-6581075034034719564000
6645937379553681443000
6363833355925386903000
nextLong()
可以返回任何长值,包括负值。 将nextLong()
的结果乘以(MAX_NUMBER - MIN_NUMBER)
可能会导致溢出,并且不会为您提供所需范围内的结果。
您可以改用Math.random()
:
System.out.print((long)(Math.random() * (MAX_NUMBER - MIN_NUMBER))+ MIN_NUMBER);
奇怪,我无法重现您的问题。 看起来JVM的随机数生成有缺陷吗? 您可以尝试使用SecureRandom代替Random。
顺便说一句,我只想指出Math.random() * (max - min) + min
模式不会导致均匀分布(尽管它很接近)。
您可以尝试使用Apache Commons: RandomDataGenerator 。 它具有nextLong(long lower, long upper)
实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.