如何在JavaScript中读取20位整数?

时间:2018-12-28 09:43:28

标签: javascript

JavaScript 中 我有一个20位的变量(16287008619584270370),我想将其转换为64位的二进制,但是当我使用二进制转换代码(下面提到)时,它没有显示真正的64位二进制。

var tag = 16287008619584270370;
var binary = parseInt(tag, 10).toString(2);

在dec2bin代码实现之后:

-1110001000000111000101000000110000011000000010111011000000000000

正确的二进制文件应为:

-1110001000000111000101000000110000011000000010111011000011000010

(最近8个二进制文件已更改)

当我检查了问题之后,我才知道代码最多会读取16位的变量,因为它假定为0000并显示了此二进制文件(16287008619584270000)。

所以最后我需要从任何地方编写代码,将我的整个20位数字转换为Java脚本中的实际二进制代码。

2 个答案:

答案 0 :(得分:3)

由于64位浮点表示的精度有限而出现问题。当您这样做时:

var tag = 16287008619584270370;

...您失去了精确度。如果输出该数字,您会发现它会减少370。 JS无法在其number数据类型中表示给定的数字。

您可以使用BigNumber库(或许多其他选择):

const tag = BigNumber("16287008619584270370");
console.log(tag.toString(2));
<script src="https://cdnjs.cloudflare.com/ajax/libs/bignumber.js/8.0.1/bignumber.min.js"></script>

请确保将大量数字作为字符串传递,否则,即使在开始之前,您也已经失去了精度。

未来

在撰写native BigInt的提案时,该文件处于第3阶段,BigInt已在Chrome中发布,并且正在Node,Firefox和Safari中进行。”

该更改包括语言扩展,引入了带有后缀“ n”的BigInt文字:

var tag = 16287008619584270370n;

答案 1 :(得分:1)

要读取16个以上的字符,我们使用BigInt而不是int。

var tag = BigInt("16287008619584270370"); // as string
var binary = tag.toString(2);

console.log(binary);