如何在java中生成两个值之间的序列?

时间:2017-01-13 07:06:06

标签: java sequence sequence-generators

我拥有的两个值是:

firstval=200.000 
Secondval=399.999,

我必须生成一个数字,这样当第一个小数部分增加到999为整数部分时,接下来应该增加整数部分,然后小数部分重置为000并开始递增新号码。这发生在399之前。 喜欢

  

200.001,200.002 ..... 200.999,201.000,201.002 .... 399.998,399.999"

3 个答案:

答案 0 :(得分:3)

有一种很好的方法可以使用Java 8 Stream API获取所需的数组

(1)使用双增量

 double[] sequence = DoubleStream.iterate(200.0, d -> d + 0.001).limit((int) (1 + (399.999 - 200.0) / 0.001)).toArray();

注意,总结很多双打可能会产生一些错误,例如在我的笔记本电脑上,序列中的最后一个数字是399.99899999686227

(2)更好的方法是生成整数流并将其映射到双精度:

 double[] sequence = IntStream.range(200000, 400000).mapToDouble( i -> i * 0.001).toArray();

在这种情况下,不会累积添加多个双打的错误

答案 1 :(得分:2)

double start = 200.0;
double end = 399.999;
double increment = 0.001;

for (double v = start; v < end + increment / 2; v += increment) {
    System.out.printf("%.3f\n", v);
}

答案 2 :(得分:0)

以下是另一种方法:

public static void counterGenerator(double start, double end) {
    DecimalFormat counterInDecimalFormat = new DecimalFormat("0.000");
    String counterInString = counterInDecimalFormat.format(start);
    System.out.println(counterInString); // This is the counter in String format.
    double counter = Double.parseDouble(counterInString);
    if (counter < end)
        counterGenerator(start + 0.001, end);
    return;
}

在上面的示例中,您在String

变量中的计数器为counterInString格式

但是您不必担心与增加Double实际驻留在String变量中相关的问题。在代码中,您可以看到double counter正在完成递增任务,使用String类将其转换回DecimalFormat

此处将您的计数器设为String可帮助您在0s之类的数字中保留小数点后的200.000

希望它有所帮助!