我想在Java中创建一个双精度数组,其中包含0到100之间的值,步长为0.1
在Python中,可以使用范围函数: range(0, 100, 0.1)
在Java 8中,这可以工作:
Double[] x = DoubleStream.iterate(0.1, i -> i + 0.1).limit(1000).boxed().toArray(Double[]::new);
Run Code Online (Sandbox Code Playgroud)
有什么比我更简单的了吗?
您的解决方案似乎有效,但它会因连续计算而浮点四舍五入.
[0.1,0.2,0.30000000000000004,0.4,0.5,0.6,0.7,0.7999999999999999,0.8999999999999999,0.9999999999999999,1.0999999999999999,
似乎DoubleStream
没有range
方法,但IntStream
确实如此rangeClosed
,但是你没有控制增量.(也存在range
,但结束参数不包括在范围内.)
通过增量步长1 返回
IntStream
从startInclusive
(包含)到endInclusive
(包含)的顺序.
你可以通过流式传输一些int
s然后除以10.0
得到你的增量来绕过累积的浮点舍入误差0.1
.另外,正如已经评论过的那样,拥有一个原始数组double[]
以避免装箱和额外的内存使用更为简单.
double[] y = IntStream.rangeClosed(0, 1000)
.mapToDouble(i -> i / 10.0)
.toArray();
Run Code Online (Sandbox Code Playgroud)
[0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.1,2.2,2.3,2.4 ,2.5,
当然总有基本的for
循环,对我来说看起来很简单.
double[] z = new double[1001];
for (int i = 0; i < z.length; i++) { z[i] = i / 10.0; }
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
221 次 |
最近记录: |