我有一个计数器,每次迭代都会增加0.33
。规范输出的最佳方法是什么,剩余的十进制是.33
,.66
或.99
,具体取决于其逻辑迭代?
每次迭代后左边是我的计数器,右边显示我希望它如何标准化:
iteration / decimal / normalised
0 > .33 > .33
1 > .66 > .66
2 > .99 > .99
3 > 1.32 > 1.33
4 > 1.65 > 1.66
5 > 1.98 > 1.99
6 > 2.31 > 2.33
7 > 2.64 > 2.66
8 > 2.97 > 2.99
...
170 > 56.1 > 56.99
171 > 56.43 > 57.33
172 > 56.76 > 57.66
173 > 57.09 > 57.99
请注意,在迭代线的下方,56.1
是170
(.33
)的56.1 / .33 = 170
次迭代,因此其逻辑结尾为.99
,因为它是3(170 % 3 = 2
)系列中的最后一个。
这是一个fiddle,它总结了迭代逻辑。
答案 0 :(得分:0)
var increment = 1/3;
var start = 0;
while(true) {
start += increment;
alert(start);
}
除非您需要在数千次迭代中获得惊人的精度,否则上述代码应该可以解决您的问题。
否则我建议使用整数来获得精确的精度。
var increment = 1;
var start = 0;
while(true) {
start += increment;
alert(start/3);
}
答案 1 :(得分:0)
我认为这样会好的
function CreateSeries()
{
for(int i=0;i<4;i++)
{
document.write(i + .33);
document.write(i + .66);
document.write(i + .99);
}
}
答案 2 :(得分:0)
也许我在最初的问题中没有特别好地解释逻辑迭代,但我发现以所需方式规范化数字的最简单方法是使用以下内容:
function normalise(input){
var output = ( Math.floor((input / .33) / 3)) + ((((input / .33) % 3) + 1) * .33 );
return Number(output.toFixed(2));
}
这有预期的结果:
iteration : output
0 : 0.33
1 : 0.66
2 : 0.99
3 : 1.33
4 : 1.66
5 : 1.99
6 : 2.33
7 : 2.66
8 : 2.99
9 : 3.33
10 : 3.66
...
100 : 33.66
101 : 33.99
102 : 34.33
103 : 34.66
104 : 34.99
105 : 35.32
...
165 : 55.33
166 : 55.66
167 : 55.99
168 : 56.33
169 : 56.66
170 : 56.99
该方法的example。