转换JavaScript二进制字符串并再次返回是不相等的

时间:2012-01-09 00:31:13

标签: javascript binary decimal

我有一个64元素的JavaScript数组,我用它作为位掩码。不幸的是,在从字符串转换为二进制文件时,我遇到了一个问题。这适用于其他一些阵列,但这里发生了什么?

var a = [1, 1, 1, 1, 1, 1, 1, 1,
         1, 1, 1, 1, 1, 1, 1, 1,
         1, 1, 0, 0, 1, 1, 1, 1,
         1, 1, 0, 0, 1, 1, 1, 1,
         1, 1, 0, 0, 0, 0, 1, 1,
         1, 1, 0, 0, 0, 0, 1, 1,
         1, 1, 1, 1, 1, 1, 1, 1,
         1, 1, 1, 1, 1, 1, 1, 1];

var str1 = a.join('');
  //-> '1111111111111111110011111100111111000011110000111111111111111111'

var str2 = parseInt(str1, 2).toString(2);
  //-> '1111111111111111110011111100111111000011110001000000000000000000'

str1 === str2  //-> false

我希望str2str1相同,但事实并非如此。

1 个答案:

答案 0 :(得分:6)

在JavaScript中,Number类型为64-bit double-precision valuemoremore)。你已经在那里指定了64位,这超出了64位双精度值可以准确指定的范围(因为它是浮点类型,因此必须将一些位用于精度)。 JavaScript没有整数类型(更不用说64位版本),这就是完美保真度转换所需要的。

我不是所有关于浮点位表示的,但IIRC是64位双精度数,准确表示大约53位有效位的整数值,请参阅链接的信息。