可以計算所需的整步數,並利用這些來控制循環。當你到達最後一步時,你使用end
值。
public static void main(String[] args)
{
Double start = 2.1;
Double end = 5.3;
Double step = 0.6;
int steps = (int)Math.round((end-start)/step);
if(start + steps*step < end) steps++;
double pos = start;
for(int s=0; s<=steps;)
{
System.out.println(pos);
s += 1;
pos = (s==steps) ? end : start + step*s;
}
}
輸出:
2.1
2.7
3.3
3.9
4.5
5.1
5.3
注意,對於中間步驟,我們使用乘法,而不是重複加入計算位置。目前我找不到一個參考,但我的理解是這會導致浮點「漂移」較少。這似乎證明了這一點。如果我們使用:
pos = (s==steps) ? end : pos+step;
計算下一個pos
那麼我們得到的輸出:
2.1
2.7
3.3000000000000003
3.9000000000000004
4.5
5.1
5.3
我會通過10和使用int繁衍在這裏,你可以與雙打 – 2017-09-01 17:12:23
這部分四捨五入問題結束不是另一個問題的重複,OP做同樣的事情,但他想要一個不同的結果。 – dasblinkenlight
@dasblinkenlight我不同意你的看法,OP想要一個包含end的循環的事實在這裏並不重要,它是'<'vs'<=' – 2017-09-01 17:23:23