将大数字从二进制转换为十进制并返回JavaScript [英] Converting large numbers from binary to decimal and back in JavaScript

查看:156
本文介绍了将大数字从二进制转换为十进制并返回JavaScript的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在JavaScript中有一个非常大的数字表示为二进制:

I have a very large number represented as binary in JavaScript:

 var largeNumber = '11010011010110100001010011111010010111011111000010010111000111110011111011111000001100000110000011000001100111010100111010101110100010001011010101110011110000011000001100000110000011001001100000110000011000001100000110000111000011100000110000011000001100000110000011000010101100011001110101101001100110100100000110000011000001100000110001001101011110110010001011010001101011010100011001001110001110010100111011011111010000110001110010101010001111010010000101100001000001100001011000011011111000011110001110111110011111111000100011110110101000101100000110000011000001100000110000011010011101010110101101001111101001010010111101011000011101100110010011001001111101'

当我使用 parseInt(largeNumber,10)将其转换为十进制时 l它给了我 1.5798770299367407e + 199 但当我尝试将其转换回二进制时:

When I convert it to decimal by use of parseInt(largeNumber, 10)l it gives me 1.5798770299367407e+199 but when I try to convert it back to binary:

parseInt(`1.5798770299367407e+199`, 2)

它返回 1 (我认为这与 parseInt 如何通过舍入值有关)当我期待看到我的原始二进制表示 largeNumber 。你能解释一下这种行为吗?我如何在JavaScript中将其转换回原始状态?

it returns 1 (which I think is related to how parseInt works by rounding value) when I was expecting to see my original binary representation of largeNumber. Can you explain me such behavior? And how I can convert it back to original state in JavaScript?

编辑:这个问题是我实验的结果,我在玩耍存储和传输大量布尔数据。 largeNumber 表示集合 [true,true,false,true ...] 的布尔值,必须在客户端,客户端工作者和服务器之间共享。

This question is a result of my experiment where I was playing around with storing and transferring large amount of boolean data. The largeNumber is a representation of a collection [true,true,false,true ...] of boolean values which has to be shared between client, client worker and server.

推荐答案

当您将其转换回二进制时,您不需要解析它作为基础2,那是错的。您还试图将整数解析为浮点数,这可能导致不精确。使用此行:

When you convert it back to binary, you don't parse it as base 2, that's wrong. You're also trying to parse an integer as a float, this can cause imprecision. With this line:

parseInt(`1.5798770299367407e+199`, 2)

您告诉JS将基数10解析为基数2!您需要做的是将其转换为二进制(请注意使用 parseFloat ):

You're telling JS to parse a base 10 as base 2! What you need to do is convert it to binary like so (note the use of parseFloat):

var largeNumber = '11010011010110100001010011111010010111011111000010010111000111110011111011111000001100000110000011000001100111010100111010101110100010001011010101110011110000011000001100000110000011001001100000110000011000001100000110000111000011100000110000011000001100000110000011000010101100011001110101101001100110100100000110000011000001100000110001001101011110110010001011010001101011010100011001001110001110010100111011011111010000110001110010101010001111010010000101100001000001100001011000011011111000011110001110111110011111111000100011110110101000101100000110000011000001100000110000011010011101010110101101001111101001010010111101011000011101100110010011001001111101';

//intLN is integer of large number
var intLN = parseFloat(largeNumber, 2); //here, you used base 10 to parse as integer, Incorrect
console.log(intLN);

var largeNumberConvert = intLN.toString(2); //here, we convert back to binary with toString(radix).
console.log(largeNumberConvert);

之前,您将小数转换为二进制。您需要做的是调用 toString(radix)将其转换回二进制,所以:

Before, you converted a decimal to binary. What you need to do is call toString(radix) to convert it back into binary, so:

var binaryRepresentation = integerFormOfLargeNumber.toString(2);

如果查看输出,您会看到:

If you look at the output, you see:

Infinity
Infinity

因为你的二进制数很大,它会影响结果。因为JS最多支持64位,所以数字太大了。它导致 Infinity 并且不精确。如果您尝试将 largeNumberConvert 从二进制重新转换为十进制,如下所示:

Since your binary number is quite large, it can affect the results. Because JS supports up to 64 bits, the number is way too large. It causes Infinity and is imprecise. If you try re-converting the largeNumberConvert from binary to decimal like this:

parseInt(largeNumberConvert, 10);

您可以看到它输出 Infinity

这篇关于将大数字从二进制转换为十进制并返回JavaScript的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆