Javascript将bigInt转换为字符串

时间:2015-03-29 19:10:43

标签: javascript string node.js bigint

我正在尝试将以下大型int转换为javascript中的字符串,但没有成功。我的目标最终将以'582235852866076672'

结束
var foo = 582235852866076672;
console.log(foo); // 582235852866076700

var baz = "'" + 582235852866076672 + "'";
console.log(baz); // '582235852866076700'

var emptyString = 582235852866076672+'';
console.log(emptyString); // 582235852866076700

var n = foo.toString();
console.log(n); // 582235852866076700

我认为这个数字太大而且因此失去了精确度。 我包含了bigint library没有成功:

var bigint = require('bigint');
var bigintLibrary = bigint(582235852866076672).toString();
console.log(bigintLibrary); //582235852866076700

bigint库中的toSting方法说明:

  

“将所请求基数中的bigint实例打印为字符串。”

感谢所有帮助和评论。感谢。

4 个答案:

答案 0 :(得分:5)

这是一个精确问题 - 您回来的号码(582235852866076672)大于JavaScript中可表示的最大号码,即2 ^ 53或9007199254740992

答案 1 :(得分:1)

您可以使用BigInt方法BigInt.prototype.toLocaleString()BigInt.prototype.toString()。希望能有所帮助。

点击此处:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt,以获取更多BigInt信息。

答案 2 :(得分:0)

至于2019年,您可以使用内置的BigInt和bigint文学,例如:BigInt(1234567801234567890n),以及这样的BigInt("1234567801234567890"),请参阅document on MDN

答案 3 :(得分:0)

似乎即使有三个答案,只有其中一个真正回答了问题,但这不是公认的答案...


这是我的回答:

首先,您应该不需要导入 BigInt 库(至少现在是)... BigInt 是 JavaScript 内置的,您可以通过调用以下函数访问它:BigInt(...) 或通过在数字末尾添加“n”:45625625443n

BigInt 可以容纳非常大的数字,上次我查了一下,限制是 10 亿位 1。这意味着你可以保存一个大约 1×10109 的整数,这在大多数情况下你很可能不需要任何那么大的整数。

正如我上面所展示的,您可以通过使用构造函数 (BigInt(...)) 或通过在末尾添加 'n' (45625625443n) 来构建 BigInt 2< /sup>

使用构造函数时,参数可以是以下任意一个:

// String
   BigInt("1234567890987654321234567890")
   // -> 1234567890987654321234567890n

// Number
   BigInt(1234567890987654321234567890)
   // -> 1234567890987654321234567890n

// BigInt
   BigInt(1234567890987654321234567890n)
   // -> 1234567890987654321234567890n

// Boolean
   BigInt(false) // 0n
   BigInt(true)  // 1n

您不能在操作中混合使用类型。你不能用普通的 JavaScript 数字做任何普通的操作,你必须先把它们转换成 BigInts。

let big_int_number = BigInt(135445264365246564)

// Incorrect
big_int_number + 1365

// Correct (either one)
big_int_number + 1365n
big_int_number + BigInt(1365)

最后来回答真正的问题:要将 BigInt 转换为字符串,您只需要使用内置方法 3:

let big_int_number = BigInt(135445264365246564)

// Using BigInt.prototype.toString()
let string_version = big_int_number.toString()


/* You probably don't need this method,
   but I just put it here just because */

// Using BigInt.prototype.toLocaleString()
let string_version = big_int_number.toLocaleString()

这适用于两种构造方式...

let n_constructed = 1234567890987654321234567890n
    n_constructed.toString()       // 1234567890987654321234567890n
    n_constructed.toLocaleString() // 1234567890987654321234567890n

let constructered = BigInt(1234567890987654321234567890)
    constructered.toString()       // 1234567890987654321234567890n
    constructered.toLocaleString() // 1234567890987654321234567890n

如果您对 BigInt 有任何疑问,请访问 MDN's reference page on BigInt