Uint8ClampedArray的奇怪舍入行为

时间:2017-06-25 07:56:45

标签: javascript typed-arrays

我发现Javascript的Uint8ClampedArray的舍入行为对我来说没有意义。根据{{​​3}},当将非整数设置为Uint8ClampedArray时,“将设置最接近的整数”。

奇怪的是,对于任何值i+0.5(其中i是整数),如果i为奇数,则值将向上舍入,如果i则向下舍入是偶数。

这是一个显示行为的简单示例:

var clampedArr = new Uint8ClampedArray(1);
for (var i = 0; i < 6; i++) {
    var val = i + 0.5;
    clampedArr[0] = val;
    console.log(val + " -> " + clampedArr[0]);
}

输出

0.5 -> 0
1.5 -> 2
2.5 -> 2
3.5 -> 4
4.5 -> 4
5.5 -> 6

the spec上面的代码。

这种行为能否以某种方式解释,因为它与Math.round()不同?

1 个答案:

答案 0 :(得分:2)

我对评论不满意,因为他们没有解释Math.round()使用的Javascript标准舍入行为的差异。因此我挖了一点。

Mozilla's documentation for Uint8ClampedArray简单地说&#34;如果你指定一个非整数,最近的整数将被设置为&#34;,而不指定舍入类型。 Javascript程序员(像我一样)可能会认为舍入与Math.round()

中的舍入相同

Microsoft's documentation for Uint8ClampedArray更精确,并添加以下注释:&#34; Uint8ClampedArray对象中的值四舍五入到最接近的偶数值,称为银行家舍入。&#34 ; 这清楚地表明正在使用与Math.round()不同的舍入。