在javascript函数中添加两个数字

时间:2017-09-19 12:15:42

标签: javascript

我是javascript的初学者。我们的老师要求我们编写一个程序,使用函数add()添加两个数字。问题如下:

但是,当我使用我的代码添加这两个数字时。结果不是数字。

<html>
    <head> <title> Third example </title>
     <script type="text/javascript">
     function sum (x,y)
     { num1=parseInt(x);
    	num2=parseInt(y);
    	return (num1+num2);}
     var input1 = window.prompt("Enter a number: ", 0);
     var input2 = window.prompt("Enter another number: ", 0);
     var input3 = window.prompt("Enter another number: ", 0);
     var value1 = parseFloat(input1 + input2);
     var value3 = parseFloat(input3);
     var sum = sum(value1 + value3);
     document.writeln("<h1> First number: " + value1 + "</h1>");
     document.writeln("<h1> Second number: " + value3 + "</h1>");
     document.writeln("<h1> Sum: " + sum + "</h1>");
     </script> 
    <head>
    <body></body> </html>

为什么总和不是数字?

5 个答案:

答案 0 :(得分:2)

在计算parseFloat()的总和时,您必须为input1input2单独添加value1。另一项更改是var sum = sum1(value1 , value3);而不是var sum = sum1(value1 + value3);,它将y的参数sum(x,y)设为undefined

var input1 = window.prompt("Enter a number: ", 0);
var input2 = window.prompt("Enter another number: ", 0);
var input3 = window.prompt("Enter another number: ", 0);
var value1 = parseFloat(input1) + parseFloat(input2);
var value3 = parseFloat(input3);
var sum = sum1(value1 , value3);
document.writeln("<h1> First number: " + value1 + "</h1>");
document.writeln("<h1> Second number: " + value3 + "</h1>");
 document.writeln("<h1> Sum: " + sum + "</h1>");

function sum1 (x,y)
{ 
   return (x+y);
}

另外,当Adriani6提到时,您在sum1中不需要再次parseFloat,因为您已经将解析后的浮点数分配给value1value3

答案 1 :(得分:1)

虽然有点脏,但是可以:

var amount = 58.02;
var total = '&pound;' + (amount*1 + 177);

...给出了预期的答案£217.73

括在方括号内将“ amount”强制为数字。但是...

var amount = 40.73;
var total = '&pound;' + (amount*1 + 177.82);

给出了218.54999999999998英镑的真正愚蠢答案(!)

[1月26日编辑-斜体的下一部分保留以供参考...

这仅在答案的(正确)小数部分为.55或.65 Javascript错误吗? (在Firefox和Chrome中是相同的。)

因此需要更多的操作才能绝对确定:乘法,整数化和后续除以100 ...

var amount = 40.73;
document.write('Total is: &pound;' + parseInt(amount*100 + 17782) / 100);

..给出正确答案为“总计为:218.55英镑” ]

编辑:以后发现更好的解决方案使用toFixed():-

var amount = 40.73;
var total = 'Total is: &pound;' + (amount* + 177.82).toFixed(2);

..还给出了正确的答案:“总计为:218.55英镑”

Soooooo-

1)如果总和是字符串的一部分,则需要将要添加的数字括在方括号内;

2)将每个“数字”乘以1会将结果强制为数字-因此(input1 * 1 + input2 * 1)被强制为算术和。在原始提问者的脚本中这是必需的,但在我的示例中不需要乘以一。

3)为确保您不会得到一个愚蠢的答案,请将.toFixed(n)附加到方括号表达式中-其中n是小数位数。

非常乏味(仍然)...

(和)如果可以的话,最好使用PHP!

答案 2 :(得分:0)

您看到的错误在于:

sum(value1 + value3)

您的sum函数需要单独使用参数,并在内部执行添加,但是在将它们发送到函数之前,它们会在线添加它们。由于只有一个值发送到sum(),因此其第二个参数为undefined,因此“不是数字”。只需将值分开:

sum(value1, value3)

您可能还没有注意到的其他错误在这里:

parseFloat(input1 + input2)

例如,如果您输入12,则结果为12。这是因为您在将字符串转换为数字值之前“添加”(连接)字符串。首先转换它们,然后添加它们。像这样:

var value1 = parseFloat(input1) + parseFloat(input2);

除此之外,代码可能会被清理一些,例如不需要你正在进行的所有解析。 (一旦将某些内容解析为数值,就不需要再次将其解析为数值。)您还可以查看设置值到页面上的元素而不是使用{{1}之类的内容。但是,这可能是另一天的教训。

答案 3 :(得分:0)

因为在Javascript中,+运算符被重载,即具有多种含义,具体取决于您提供的参数。 +表示字符串的连接和&#34;数字&#34; (针对不同类型的数字)。

答案 4 :(得分:0)

您可以使用添加功能,该功能需要 ads 个参数:

function add() {
  // Create an array from the functions arguments object
  // then sum the array members using reduce
  var sum = Array.from(arguments).reduce(function(a, b) {
    return a + b;
  });
  console.log(sum);
}
// You can now add as many numbers as you like
// just by passing them to the function
add(2, 5);
add(2, 3, 5);