SVG折线/多边形的点dom值与点属性值

时间:2015-08-03 01:56:15

标签: svg

请参阅此svg代码

<polyline id="poly" points="163.2 100 163.2 200"
     stroke-width="1" fill="none" stroke="red"></polyline>

和这个javascript代码

var poly = document.getElementById('poly');
console.log(poly.points.getItem(0).x);

将获得 163.1999969482422 。不是预期的 163.2

javascript中

和(163.2 == 163.1999969482422) false

我在chrome和firefox中测试过。

这是一个错误还是我必须使用poly.getAttribute('points')并将属性值字符串解析为数组?

1 个答案:

答案 0 :(得分:1)

为了提高速度和性能,大多数UA将折线点编码为IEEE-754格式浮点数。 163.2不能用32位IEEE-754格式的二进制精确表示。你通过实验发现,The nearest 32 bit IEEE-754 value到163.2是163.1999969482422。这就是价值在内部存储的方式。

然而,javascript以64位IEEE-754二进制存储数字,允许更高的精度,因此最接近的32位值与最接近的64位值不完全匹配。