如何在Node.js中存储极大数字而不会丢失任何精度?

时间:2017-08-02 03:19:23

标签: javascript json node.js largenumber

我需要能够以全精度(低至0,因此不是0.9或更低)添加,减去和存储(通过JSON)数字,直到+/-99.99*10^2040。我遇到的主要两个问题是Infinity远远低于那个,并且大数字会失去精确度。我非常希望不只是将整个事物转换为字符串,因为JSON文件会很快变得混乱。我想做["99", "50"]这样的事情来象征99*10^50但是要么丢失精度要么占用更多的空间而不仅仅是使用字符串。我也研究过biginteger库,但是出现了类似的问题,特别是将数字存储在JSON中。

2 个答案:

答案 0 :(得分:1)

JavaScript没有像Java那样处理大整数的本机对象。你需要自己实现逻辑,我认为你已经开始了。然而,这将是非常多余的,因为它之前已经完成。 Here's a library for BigInteger native in JavaScript.

您可以通过npm:

将其安装到node.js项目中

npm install big-integer

然后,您可以将其包含在您需要的地方:

var bigInt = require("big-integer");

之后,使用非常简单:

var largeNumber = bigInt("75643564363473453456342378564387956906736546456235345");

如果您需要浮点数,Here's another node library for handling BigDecimal.

请注意,JSON不接受这些对象类型中的任何一种。如果你绝对必须通过JSON存储,那么你应该分别存储尾数和指数,并接受在许多情况下你将失去精度。

答案 1 :(得分:1)

big-numbers库支持json。安装:

npm install --save big-numbers

用法:

var numbers = new BigNumbers();
var bigNumber = numbers.of('75643564363473453456342378564387956906736546456235345');
console.log('Json:' + JSON.stringify(bigNumber));