Как создать последовательность между двумя значениями в 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 ответа

Есть хороший способ получить необходимый массив с помощью 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();

В этом случае ошибка при добавлении нескольких двойных чисел не накапливается.

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

Вот еще один способ сделать это:

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,

Надеюсь, поможет!

Другие вопросы по тегам