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