【问题标题】:How to handle very big numbers in node js?如何在节点 js 中处理非常大的数字?
【发布时间】:2017-09-26 13:51:47
【问题描述】:

我在 mysql 数据库中使用 BigInt(20) 数据类型作为自动增量 ID。 当整数值如此之大时,我该如何处理它,因为在javascript的数字精度之后,它不允许插入和读取任何数字值。那么我怎样才能做到这一点。 阅读大整数库,但我不会得到预期的结果

例子:-

var x = 999999999999999999999999999999999999999;

如何在不使用指数值和任何垃圾值的情况下打印相同的数字?

我试过了

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

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

示例2:-

如果我得到最后插入的Id,那么我该如何处理这个值

 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
          }

  });

【问题讨论】:

  • 不要认为 BIGINT(20) 会生成一个 20 位数的 int。(20) 仅适用于 mysql 的 zerofull 函数... BIGINT 的最小值和最大值在这里dev.mysql.com/doc/refman/5.5/en/integer-types.html ..
  • @robertklep 提供了一个很好的答案。我想补充另一个想法。根据您的具体环境,JavaScript 为您提供高达 2^53 - 1 的“安全整数”。MySQL 的 BIGINT 是(取决于您的安装)一个 64 位值。因此,如果 2^53 - 1 (= 9007199254740991) 足以满足您的需求,那么无论如何您都可以使用这种组合(当然要注意界限)。

标签: javascript mysql node.js numbers biginteger


【解决方案1】:

您只能将这样的大数字传递/显示为字符串

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

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

但是,最终,如何处理这样的大量数字取决于 MySQL 驱动程序,因为它确实必须考虑到Number.MAX_SAFE_INTEGER

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

【讨论】:

  • 值得澄清:如果您的应用程序需要超过 14 或 15 位的整数值,那么如果您尝试在Javascript。如果可以,请避免它。
  • @robertklep 我怎么能像这样执行,因为有些发送的数据非常大,所以我怎么能把它作为字符串传递
  • @VIKASKOHLI 看到我的编辑。您可能必须在 MySQL 驱动程序中专门启用 BIGINT 支持。
  • @robertklep 所以我必须更改 sql 包以支持非常大的数字
  • @VIKASKOHLI 不,您必须设置正确的选项。它已经支持大数字,但默认情况下禁用该支持。请阅读文档。
猜你喜欢
  • 1970-01-01
  • 2013-08-05
  • 2010-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多