我在使用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>
答案 0 :(得分:8)
parseInt(a = prompt('Pay 1'), 10);
...
parseInt(b = prompt('Pay 2'), 10);
...
parseInt(t = (a * 20 + b), 10);
此处a
,b
和t
都只有字符串数据,当它转换为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,
- 左边是评估MultiplicativeExpression的结果。
- 让leftValue为GetValue(左)。
- 正确评估UnaryExpression的结果。
- 让rightValue为GetValue(右)。
- 让leftNum为ToNumber(leftValue)。
- 让rightNum为ToNumber(rightValue)。
醇>
*
运算符基本上将两个操作数都转换为数字。因此,即使两个操作数都是字符串中的数字,结果也是正确的。
您可以使用此
确认上述内容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>