![](/img/trans.png)
[英]Add two numbers in a form without button using JavaScript (in cshtml MVC)
[英]Javascript add two numbers that are string without using parse
對於表示為字符串的非負整數num1
和num2
,返回num1
和num2
之和。
我的解決方案是創建一個具有 indexOf 和數字值的過濾器。
const addStrings = function(num1, num2) {
let filter = "0123456789";
let x = 0;
for(let i=0; i<num1.length; i++) {
x = x + (filter.indexOf(num1[i]) * Math.pow(10, num1.length-1-i));
}
let y = 0;
for(i=0; i<num2.length; i++) {
y = y + (filter.indexOf(num2[i]) * Math.pow(10, num2.length-1-i));
}
return (x+y).toString();
};
它在大多數情況下都有效。 但是,如果輸入是:
"9333852702227987"
"85731737104263"
它將返回錯誤的總和:“9419584439332252”。 我不明白為什么它錯誤地轉換了數字。
我創建了一個 object,其鍵是 digit1、digit2 和進位 - 全部作為字符串。
function 采用兩個字符串數字並將它們“逐位”相加(實際上,逐個字符,作為 object + 進位的鍵)。
“數字”的限制是字符串長度的限制(進位減 1)。
這甚至可以適用於處理小數(我把它留給你)。
這是我的代碼:
var sumObject={};
for(var i=0; i<=9; i++) {
for(var j=0; j<=9; j++) {
var sum, carry, digit, obj;
sum=i+j;
carry=sum>9?"1":"0";
digit=sum%10;
obj={sum:""+digit, carry:carry};
sumObject[""+i+j+"0"]=obj;
sum=i+j+1;
carry=sum>9?"1":"0";
digit=sum%10;
obj={sum:""+digit, carry:carry};
sumObject[""+i+j+"1"]=obj;
}
}
function sum2StringedNumbers(sn1, sn2) {
var answer="";
var maxLength=Math.max(sn1.length, sn2.length);
sn1=("0".repeat(maxLength)+sn1).slice(-maxLength);
sn2=("0".repeat(maxLength)+sn2).slice(-maxLength);
var carry="0";
for(var i=maxLength; i>0; i--) {
var key=""+sn1.charAt(i-1)+sn2.charAt(i-1)+carry;
var answer=sumObject[key].sum+answer;
carry=sumObject[key].carry;
}
if(carry=="1") answer="1"+answer;
return answer;
}
這些數字的總和大於Number.MAX_SAFE_INTEGER
。 您需要改用BigInt
。
const addStrings = function(num1, num2) { let filter = "0123456789"; let x = 0n; for(let i=0; i<num1.length; i++) { x = x + (BigInt(filter.indexOf(num1[i])) * 10n ** BigInt(num1.length-1-i)); } let y = 0n; for(i=0; i<num2.length; i++) { y = y + (BigInt(filter.indexOf(num2[i])) * 10n ** BigInt(num2.length-1-i)); } return (x+y).toString(); }; console.log(addStrings("9333852702227987","85731737104263"));
您可以跳過很多代碼並將您的字符串直接轉換為 BigInt 並從那里計算。 然后使用toString()
將其恢復為字符串。 一探究竟:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt
(BigInt("9333852702227987") + BigInt("85731737104263")).toString();
// 9419584439332250
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.