我有两个文本框。每个将接受最多千位数字的输入。
现在我想将这两个数字相加。我的问题是我应该使用什么数据类型来存储结果?
我已经尝试过这个:
<script>
var x = 'Thousand digit of number'
var y = 'Thousand digit of number'
var z = x + y
</script>
Run Code Online (Sandbox Code Playgroud)
但我得到的结果是指数形式的。如何存储结果并显示?
Qwe*_*rty 13
这是另一种解决方案,因为它更快、更干净。
function add(A, B) {
const AL = A.length
const BL = B.length
const ML = Math.max(AL, BL)
let carry = 0, sum = ''
for (let i = 1; i <= ML; i++) {
let a = +A.charAt(AL - i)
let b = +B.charAt(BL - i)
let t = carry + a + b
carry = t/10 |0
t %= 10
sum = (i === ML && carry)
? carry*10 + t + sum
: t + sum
}
return sum
}
Run Code Online (Sandbox Code Playgroud)
> add(
'9999999999999999999999999999999999999999999999999999999999999999999999999999',
'999999999999999999999999999999999999999'
)
> "10000000000000000000000000000000000000999999999999999999999999999999999999998"
Run Code Online (Sandbox Code Playgroud)
按照此处所述使用 BigInt:https ://stackoverflow.com/a/56370672/641913
const z = BigInt(x) + BigInt(y);
console.log(z.toString());
Run Code Online (Sandbox Code Playgroud)
将数字作为字符串输入,并将每个字符作为数组相互添加,如下所示:
function add() {
document.getElementById("demo").innerHTML = "";
var x = document.getElementById("txt1").value;
var y = document.getElementById("txt2").value;
var len;
var lenx = x.length;
var leny = y.length;
var x1,y1,rem,div=0;
if(lenx>leny) len = lenx; else len = leny;
for(var i=0;i<len;i++){
if(i>=lenx) x1 = 0;
else x1 = parseInt(x[lenx-i-1]);
if(i>=leny) y1 = 0;
else y1 = parseInt(y[leny-i-1]);
rem = (x1+y1+div)%10;
div = Math.floor((x1 + y1+div)/10);
document.getElementById("demo").innerHTML = rem + document.getElementById("demo").innerHTML;
}
if(div>0){
document.getElementById("demo").innerHTML = div + document.getElementById("demo").innerHTML;
}
}
Run Code Online (Sandbox Code Playgroud)
这里的代码: https: //jsfiddle.net/mtsL1k2x/5/
注意:这仅适用于自然数。您可以根据您的输入进行修改
| 归档时间: |
|
| 查看次数: |
21898 次 |
| 最近记录: |