如何将 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
的.length
s,确定添加到三段的数字是否大于1000
。如果true
,将3
的前一段增加1
,将3
的当前段设置为000
。可以调整该方法以将适当的数字添加到数组的先前索引和当前数组,以求和,例如,如果将124
添加到4999
,则为5123
。参见答案【参考方案2】:
您可以从3
的.length
s 中的字符串从字符串末尾开始创建一个数组。
使用一个模式来检查添加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 中表示为字符串的大整数?的主要内容,如果未能解决你的问题,请参考以下文章