在 JavaScript 中 我有一个20位的变量(16287008619584270370),我想将其转换为64位的二进制,但是当我使用二进制转换代码(下面提到)时,它没有显示真正的64位二进制。
var tag = 16287008619584270370;
var binary = parseInt(tag, 10).toString(2);
在dec2bin代码实现之后:
-1110001000000111000101000000110000011000000010111011000000000000
正确的二进制文件应为:
-1110001000000111000101000000110000011000000010111011000011000010
(最近8个二进制文件已更改)
当我检查了问题之后,我才知道代码最多会读取16位的变量,因为它假定为0000并显示了此二进制文件(16287008619584270000)。
所以最后我需要从任何地方编写代码,将我的整个20位数字转换为Java脚本中的实际二进制代码。
答案 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);