JavaScript parseInt不正确的转换

JavaScript parseInt不正确的转换,javascript,parseint,Javascript,Parseint,考虑: <html> <body> <input Id="1"></input> <input Id="2"></input> <button Id="3"onclick="add()">Add</button> <script> function add() {

考虑:

<html>
    <body>
        <input Id="1"></input>
        <input Id="2"></input>
        <button Id="3"onclick="add()">Add</button>
        <script>
            function add()
            {
                var num1 = document.getElementById("1").value;
                var val1 = parseInt(num1);
                var num2 = document.getElementById("2").value
                var val2 = parseInt(num2);
                var val3 = val1 + val2;
                var x = +num1 + +num2;

                alert(val3);
       </script>
   </body>
</html>

添加
函数add()
{
var num1=document.getElementById(“1”).值;
var val1=parseInt(num1);
var num2=document.getElementById(“2”).value
var val2=parseInt(num2);
var val3=val1+val2;
变量x=+num1++num2;
警报(val3);
我想在JavaScript中添加两个数字。但当我向文本框提供“11111111111”时,parseInt将其转换为11111111111111112,而不是11111111111。为什么要这样做

我尝试了所有的技术。我首先将var转换为字符串,然后将其解析为int,然后添加,使用不同的基数和parseInt,但仍然一无所获

我还注意到,当我向它提供16个1时,它工作得很好,但使用17个1时,它可以做到这一点。

是双精度的,有15-17个有效数字


在您的情况下,
11111111
数字有17位数字,这会导致观察到的问题。

正确的parseInt格式是基数。即
parseInt(值,10)
。这里的基数是十进制数的
10
。默认情况下,一些浏览器假定基数为八进制,即
8
。请阅读更多信息。我已经尝试过了,但仍然得到相同的结果,即11111111111111112@Mr_Green有些浏览器不假定基数为八进制,除非字符串以0开头,这里不是这样。和八进制11111111111当然不是1111111111111 2。@格林先生不,
+'11111111111111'+0
(隐式
parseInt
使用
+
)也给出了
1111111111 2
(至少在Chrome中)@Mr_Green无论你对数字应用什么算法,你都无法避免精度的损失。请注意
11111111111===1111111111 2//true
。在发布之前尝试测试你的“解决方案”。。。