Javascript 是否对数字的剩余小数点进行归一化?
我有一个计数器,在每次迭代中上升Javascript 是否对数字的剩余小数点进行归一化?,javascript,numbers,normalization,Javascript,Numbers,Normalization,我有一个计数器,在每次迭代中上升0.33。使输出正常化的最佳方法是什么,使剩余的十进制数根据其逻辑迭代为.33、.66或.99 左侧是每次迭代后我的计数器,右侧显示我希望它正常化的方式: iteration / decimal / normalised 0 > .33 > .33 1 > .66 > .66 2 > .99 > .99 3
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
)
下面是一个总结迭代逻辑的示例
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);
}
我想这会是个好主意
function CreateSeries()
{
for(int i=0;i<4;i++)
{
document.write(i + .33);
document.write(i + .66);
document.write(i + .99);
}
}
函数CreateSeries()
{
对于(int i=0;i也许我在我的初始问题中没有很好地解释逻辑迭代,但我发现以所需方式使数字正常化的最简单方法是使用以下内容:
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
一个正在运行的方法的实例。建议一个无止境的循环有点令人不快。OP的迭代器(未显示)似乎不会返回偶数倍,因此需要舍入。这将返回0.3333333333和0.6666666666之类的值。哇,RobG,今晚你要流血了。他提到他对伪代码很满意。而(true)是用伪代码显示循环的常用方法。你似乎没有抓住要点(就像我最初做的那样),OP是经过一些奇怪的四舍五入来设置值的,而不是简单的算术级数。@zerkms是的,我没有抓住要点…:-(可能是我问过的最糟糕的问题。时间太晚了,我的大脑无法工作。我正在投票决定自己关闭它。。。