Javascript要么是parseInt,要么是+,而不是添加

时间:2014-01-19 09:34:44

标签: javascript string

我在使用parseInt函数或+操作数时遇到了一些问题。我想要输入两个数字,乘以一个第三个数字并将它们加在一起。不是添加数字,而是将一个数字附加到另一个数字。

<script language = 'JavaScript'>
function calculate_total()
{
var a = 0;
var b = 0;
var t = 0;

    parseInt(a = prompt('Pay 1'), 10);
//Input of 10
        if(isNaN(a))
        {
            alert('Error A');
        }
//No Error

    parseInt(b = prompt('Pay 2'), 10);
//input of 12
        if(isNaN(b))
        {
            alert('Error B');
        }
//No Error

    parseInt(t = (a * 20 + b), 10);
        if(isNaN(t))
        {
            alert('Error T');
        }
        else
        {
            alert('Total Pay: ' + t);
//expected answer 212
//Actual Answer 20012
        }
//No Error
}
calculate_total();
</script>

6 个答案:

答案 0 :(得分:8)

parseInt(a = prompt('Pay 1'), 10);
...
parseInt(b = prompt('Pay 2'), 10);
...
parseInt(t = (a * 20 + b), 10);

此处abt都只有字符串数据,当它转换为int时,会立即丢弃。所以,像这样修复它们

a = parseInt(prompt('Pay 1'), 10);
...
b = parseInt(prompt('Pay 2'), 10);
...
t = a * 20 + b;

根据ECMA Script's specifications for Additive operation,

  

7如果Type(lprim)是String或Type(rprim)是String,则返回   字符串,它是连接ToString(lprim)后跟的结果   的ToString(rprim)

因此,当您使用带有+运算符的字符串和数字时,结果将是两个操作数的连接。

根据ECMA Script's specifications for Multiplicative operation,

  
      
  1. 左边是评估MultiplicativeExpression的结果。
  2.   
  3. 让leftValue为GetValue(左)。
  4.   
  5. 正确评估UnaryExpression的结果。
  6.   
  7. 让rightValue为GetValue(右)。
  8.   
  9. 让leftNum为ToNumber(leftValue)。
  10.   
  11. 让rightNum为ToNumber(rightValue)。
  12.   

*运算符基本上将两个操作数都转换为数字。因此,即使两个操作数都是字符串中的数字,结果也是正确的。

您可以使用此

确认上述内容
var a = "100", b = "12";
console.log(a * 20);      // Prints 2000, both operands are converted to numbers
console.log(a * 20 + b);  // Prints 200012, as b is string, both are concatenated

答案 1 :(得分:4)

我无论如何都不是Javascript专家,但您似乎忽略了parseInt的结果,而只是将prompt()的结果存储在a,{{ 1}}和b变量。我期待这个:

t

是:

parseInt(a = prompt('Pay 1'), 10);

(其他提示也一样。)

此时,变量的值将是数字而不是字符串,因此a = parseInt(prompt('Pay 1'), 10); 应该适当地添加它们。

答案 2 :(得分:1)

解析由于追加为字符串而已经错误的结果:

尝试更新以下声明:

a = parseInt(prompt('Pay 1'), 10);
b = parseInt(prompt('Pay 2'), 10);
t = a * 20 + b;  // no need to parse as a and b already integers

答案 3 :(得分:1)

a = parseInt(prompt('pay 1'),10);

等。对于b和t。 现在声明为prompt('pay 1')而不是parseInt返回的int值。

答案 4 :(得分:1)

parseInt()返回一个整数值。对于默认使用的parseInt(string, 10)十进制系统,您不需要parseInt

a = parseInt(prompt('Pay 1'));
b = parseInt(prompt('Pay 2'));
t = a * 20 + b;

答案 5 :(得分:-1)

我为您修复了代码:

<script language = 'JavaScript'>
function calculate_total()
{
var a = 0;
var b = 0;
var t = 0;

    a = parseInt(prompt('Pay 1'), 10);
//Input of 10
        if(isNaN(a))
        {
            alert('Error A');
        }
//No Error

    b = parseInt(prompt('Pay 2'), 10);
//input of 12
        if(isNaN(b))
        {
            alert('Error B');
        }
//No Error

    t = parseInt(a * 20 + b, 10);
        if(isNaN(t))
        {
            alert('Error T');
        }
        else
        {
            alert('Total Pay: ' + t);
//expected answer 212
//Actual Answer 20012
        }
//No Error
}
calculate_total();
</script>