我拥有的两个价值观是:
firstval=200.000
Secondval=399.999,
我必须生成一个数字,这样当第一个小数部分应该增加直到999
积分部分时,接下来应该增加积分部分,然后小数部分重置为000
并开始为新数字增加。这种情况一直发生到399
. 喜欢
200.001,200.002.....200.999,201.000,201.002....399.998,399.999"
我拥有的两个价值观是:
firstval=200.000
Secondval=399.999,
我必须生成一个数字,这样当第一个小数部分应该增加直到999
积分部分时,接下来应该增加积分部分,然后小数部分重置为000
并开始为新数字增加。这种情况一直发生到399
. 喜欢
200.001,200.002.....200.999,201.000,201.002....399.998,399.999"
有一种使用 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
变量中的 a 相关的问题。在代码中,您可以看到递增任务是由使用类double counter
转换回的 a 完成的。String
DecimalFormat
在这里将您的计数器保留为 aString
有助于您保留0s
小数点后的数字,例如200.000
.
希望能帮助到你!