请参阅此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')
并将属性值字符串解析为数组?
答案 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位值不完全匹配。