有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有两个价值观:

firstval=200.000 
Secondval=399.999,

我必须生成一个数字,当整数部分的第一个小数部分递增到999时,下一个整数部分递增,然后小数部分重置到000并开始为新的数字递增。这种情况一直持续到399。 像

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


共 (3) 个答案

  1. # 1 楼答案

    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. # 2 楼答案

    下面是另一种方法:

    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;
    }
    

    在上面的示例中,在名为counterInString的变量中有String格式的计数器

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

    在这里,将计数器保持为String有助于您在200.000等数字中保留小数点后的0s

    希望有帮助

  3. # 3 楼答案

    有一种很好的方法可以使用Java8流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:

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

    在这种情况下,添加多个双精度不会累积任何错误