如何在节点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
}
});
只能通过/节目像这样的大数字字符串:
var BigNumber = require('big-number');
var x = new BigNumber('999999999999999999999999999999999999999', 10);
console.log(x.toString())
但是,最后,MySQL驱动程序是如何处理这种大数据的,因为它必须考虑到Number.MAX_SAFE_INTEGER
。
例如,mysql
模块具有与处理BIGINT
有关的各种选项(supportBigNumbers
和bigNumberStrings
)。
值得澄清的是:如果您的应用程序需要14或15位以上的整数值,那么如果您尝试使用Javascript编写应用程序,那么您将面临**世界的痛苦**。如果可以的话,避免它。 –
@robertklep我怎么能这样执行,因为有些人发送的数据是非常大的数字,所以我怎么能通过这个作为一个sttring –
@VIKASKOHLI看到我的编辑。您可能必须在MySQL驱动程序中专门启用'BIGINT'支持。 – robertklep
不要认为BIGINT(20)会生成一个20位数的整数。(20)仅适用于mysql的zerofull函数...关闭BIGINT的最小值和最大值在这里https://dev.mysql。 com/doc/refman/5.5/en/integer-types.html .. –
@robertklep提供了一个很好的答案。我想补充一点想法。取决于具体的环境,JavaScript为您提供“安全整数”,最高为2^53 - 1。MySQL的BIGINT是(取决于您的安装)64位值。所以,如果2^53 - 1(= 9007199254740991)足够满足您的需求,那么您可以使用这种组合(当然要考虑到您的界限)。 – iquellis