如何在节点js中处理非常大的数字?

问题描述:

我正在使用BigInt(20)数据类型在mysql数据库中自动增加id。 当整数值是如此之大,那么我怎么处理这个javascript数的精度后,它不会允许插入和读取任何数值。那么我怎么能做到这一点。阅读关于大整数库 但我不会期望的结果如何在节点js中处理非常大的数字?

例子: -

var x = 999999999999999999999999999999999999999; 

我怎么能打印照片,无需使用其指数值和任何垃圾值相同数量?

我想这样的

var BigNumber = require('big-number'); 

var x = new BigNumber(999999999999999999999999999999999999999, 10); 
console.log(x); 

例2: -

如果我得到最后插入的标识,那我该怎么处理这个值

connection_db.query('INSERT INTO tableName SET ?', tableData, 
    function (error1, results1, fields1) { 
    error1){ 
     // Db error 
     }else{ 
     var lastInserted = new BigNumber(results1.insertId); 
     console.log(lastInserted);// still wrong value 
      } 

    }); 
+1

不要认为BIGINT(20)会生成一个20位数的整数。(20)仅适用于mysql的zerofull函数...关闭BIGINT的最小值和最大值在这里https://dev.mysql。 com/doc/refman/5.5/en/integer-types.html .. –

+2

@robertklep提供了一个很好的答案。我想补充一点想法。取决于具体的环境,JavaScript为您提供“安全整数”,最高为2^53 - 1。MySQL的BIGINT是(取决于您的安装)64位值。所以,如果2^53 - 1(= 9007199254740991)足够满足您的需求,那么您可以使用这种组合(当然要考虑到您的界限)。 – iquellis

只能通过/节目像这样的大数字字符串

var BigNumber = require('big-number'); 

var x = new BigNumber('999999999999999999999999999999999999999', 10); 
console.log(x.toString()) 

但是,最后,MySQL驱动程序是如何处理这种大数据的,因为它必须考虑到Number.MAX_SAFE_INTEGER

例如,mysql模块具有与处理BIGINT有关的各种选项(supportBigNumbersbigNumberStrings)。

+1

值得澄清的是:如果您的应用程序需要14或15位以上的整数值,那么如果您尝试使用Javascript编写应用程序,那么您将面临**世界的痛苦**。如果可以的话,避免它。 –

+0

@robertklep我怎么能这样执行,因为有些人发送的数据是非常大的数字,所以我怎么能通过这个作为一个sttring –

+0

@VIKASKOHLI看到我的编辑。您可能必须在MySQL驱动程序中专门启用'BIGINT'支持。 – robertklep