Javascript Uint8ClampedArray的奇怪舍入行为

Javascript Uint8ClampedArray的奇怪舍入行为,javascript,typed-arrays,Javascript,Typed Arrays,我发现Javascript的Uint8ClampedArray的舍入行为对我来说毫无意义。根据,将非整数设置为Uint8ClampedArray时,“将设置最接近的整数” 奇怪的是,对于任何值i+0.5(其中i为整数),如果i为奇数,则值将向上舍入,如果i为偶数,则向下舍入 下面是一个简单的示例来说明该行为: var clampedArr = new Uint8ClampedArray(1); for (var i = 0; i < 6; i++) { var val = i +

我发现Javascript的Uint8ClampedArray的舍入行为对我来说毫无意义。根据,将非整数设置为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]);
}
使用上面的代码


这个行为是否可以解释为它不同于
Math.round()

我对这些评论不满意,因为它们没有解释与
Math.round()
使用的Javascript标准舍入行为的不同。所以我挖得更深一点

简单地说“如果指定非整数,将设置最接近的整数”,而不指定舍入类型。Javascript程序员(和我一样)可能会假设舍入与
Math.round()中的舍入相同


更精确,并添加了以下注释:“uint8clampedaray对象中的值被舍入到最接近的偶数值,这称为银行家舍入。”这表明舍入不同于
Math.round()
正在使用。

我对这些注释不满意,因为它们没有解释与
Math.round()
使用的Javascript标准舍入行为的差异。所以我挖得更深一点

简单地说“如果指定非整数,将设置最接近的整数”,而不指定舍入类型。Javascript程序员(和我一样)可能会假设舍入与
Math.round()中的舍入相同


更精确,并添加了以下注释:“Uint8ClampedArray对象中的值被舍入到最接近的偶数值,这称为银行家舍入。”这表明正在使用与
Math.round()
不同的舍入。

如果是偶数,则舍入向下;如果是奇数,则舍入向上。他们在科学导论课上以精确性和准确性为主题教授这一点,这是意料之中的。它防止了对取整的偏见。谢谢大家,你似乎是对的,但行为与数学不同。round()。对数组值使用不同的舍入是否有特定的原因?舍入应该如何工作?如果是偶数,则向下舍入;如果是奇数,则向上舍入。他们在科学导论课上以精确性和准确性为主题教授这一点,这是意料之中的。它防止了对取整的偏见。谢谢大家,你似乎是对的,但行为与数学不同。round()。对数组值使用不同舍入是否有特定原因?
0.5 -> 0
1.5 -> 2
2.5 -> 2
3.5 -> 4
4.5 -> 4
5.5 -> 6