如何将 1 添加到 JavaScript 中表示为字符串的大整数?

Posted

技术标签:

【中文标题】如何将 1 添加到 JavaScript 中表示为字符串的大整数?【英文标题】:How do I add 1 to a big integer represented as a string in JavaScript? 【发布时间】:2017-04-25 15:03:40 【问题描述】:

如何在 javascript 中给这个字符串加 1?

var message = "12345612345678901234567890";

我想要这样的输出:

"12345612345678901234567891"

我试过了:

var message = "12345612345678901234567890";
message = parseInt(message);
var result = message + 1;

parseInt 返回了一个科学计数法值,例如 1.234567896453e+25。

【问题讨论】:

你显然需要第三方任意精度库。您是否在使用可以安装的环境,例如 Node?​​span> parseInt(message) + 1 不是吗? @SebastiánPalma 不起作用,数字太大了。 JavaScript 中的 MAX_SAFE_INTEGER 为 9007199254740991。 This question 可能会帮助你,OP。 Large numbers to string in JavaScript的可能重复 【参考方案1】:

尝试使用大整数库BigInteger.js 来添加大数。

var message = "12345612345678901234567890";

var messageAsNumber = bigInt(message);
var messagePlusOne = messageAsNumber.add('1');

console.log(messagePlusOne.toString());
<script src="https://peterolson.github.io/BigInteger.js/BigInteger.min.js"></script>

【讨论】:

我可以在没有库的情况下这样做吗?? 不,你不能(除非你从库中获取一些零碎的东西并自己重写)。这不是普通 javascript 所支持的。 我已经完成了这个库,但我想在没有库支持的情况下这样做。 那么你应该问那个问题。 @KevinPatel “我可以在没有库的情况下执行此操作吗??” 是的,可以在没有库的情况下得出正确的总和。您可以将初始字符串分段为数组内的3.lengths,确定添加到三段的数字是否大于1000。如果true,将3的前一段增加1,将3的当前段设置为000。可以调整该方法以将适当的数字添加到数组的先前索引和当前数组,以求和,例如,如果将124 添加到4999,则为5123。参见答案【参考方案2】:

您可以从3.lengths 中的字符串从字符串末尾开始创建一个数组。

使用一个模式来检查添加1是否会导致数组的索引,因为一个数字的总和为1000,如果true,则将先前的数组索引增加1并填充当前数组索引"000"

下面的模式只检查和调整数组的最后两个元素;可以扩展相同的模式来检查数组的每个索引,将一个或多个索引正确调整为"000",并将前一个索引增加1

let message1 = "12345612345678901234567890";
let message2 = "12345612345678901234567999";
let message3 = "12345612345678901234999999";

function addNumberToString(str, numToAdd, digits = []) 

  const [N, len, max] = [3, str.length, 1000];

  for (let i = -N, l = len; digits.length < len / N; i -= N, l -= N) 
    digits.unshift(str.slice(i, l));
  

  function add(m) 
    if (+digits[digits.length - m] + numToAdd < max) 
      let n = +digits[digits.length - m];
      digits[digits.length - m] = String(Number(n + numToAdd));
     else 
      const M = m + 1;
      if (+digits[digits.length - M] + numToAdd < max) 
        let n = +digits[digits.length - M];
        digits[digits.length - M] = String(Number(n + numToAdd));
        digits[digits.length - (M - 1)] = "0".repeat(N);
       else 
          if (digits[digits.length - (m + 1)]) 
            digits[digits.length - (M - 1)] = "0".repeat(N);
            add(m + 1);
          
      
    
    return digits.join("")
  
  return add(1);



console.log(
  addNumberToString(message1, 1)   
, addNumberToString(message2, 1)
,  addNumberToString(message3, 1)
);

【讨论】:

以上是关于如何将 1 添加到 JavaScript 中表示为字符串的大整数?的主要内容,如果未能解决你的问题,请参考以下文章

火炬意味着功能的误解

SQL select语句汇总几种情况并返回百分比?

Java基础——JSON

Spring3 - Aop面向切面编程

如何在 JavaScript 中表示浮点数? [复制]

将字段添加到数据库而不删除 Prisma 中表的数据