Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否对数字的剩余小数点进行归一化?_Javascript_Numbers_Normalization - Fatal编程技术网

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是的,我没有抓住要点…:-(可能是我问过的最糟糕的问题。时间太晚了,我的大脑无法工作。我正在投票决定自己关闭它。。。