规范化数字的剩余小数?

时间:2014-07-04 03:03:58

标签: javascript numbers normalization

我有一个计数器,每次迭代都会增加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.1170.33)的56.1 / .33 = 170次迭代,因此其逻辑结尾为.99,因为它是3(170 % 3 = 2)系列中的最后一个。

这是一个fiddle,它总结了迭代逻辑。

3 个答案:

答案 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