-1

我拥有的两个价值观是:

firstval=200.000 
Secondval=399.999,

我必须生成一个数字,这样当第一个小数部分应该增加直到999积分部分时,接下来应该增加积分部分,然后小数部分重置为000并开始为新数字增加。这种情况一直发生到399. 喜欢

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

4

3 回答 3

4

有一种使用 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();

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

于 2017-01-13T07:48:47.330 回答
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);
}
于 2017-01-13T07:14:22.550 回答
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变量中的 a 相关的问题。在代码中,您可以看到递增任务是由使用类double counter转换回的 a 完成的。StringDecimalFormat

在这里将您的计数器保留为 aString有助于您保留0s小数点后的数字,例如200.000.

希望能帮助到你!

于 2017-01-13T07:57:35.560 回答