我是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>
为什么总和不是数字?
答案 0 :(得分:2)
在计算parseFloat()
的总和时,您必须为input1
和input2
单独添加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
,因为您已经将解析后的浮点数分配给value1
和value3
强>
答案 1 :(得分:1)
虽然有点脏,但是可以:
var amount = 58.02;
var total = '£' + (amount*1 + 177);
...给出了预期的答案£217.73
括在方括号内将“ amount”强制为数字。但是...
var amount = 40.73;
var total = '£' + (amount*1 + 177.82);
给出了218.54999999999998英镑的真正愚蠢答案(!)
[1月26日编辑-斜体的下一部分保留以供参考...
这仅在答案的(正确)小数部分为.55或.65 Javascript错误吗? (在Firefox和Chrome中是相同的。)
因此需要更多的操作才能绝对确定:乘法,整数化和后续除以100 ...
var amount = 40.73;
document.write('Total is: £' + parseInt(amount*100 + 17782) / 100);
..给出正确答案为“总计为:218.55英镑” ]
编辑:以后发现更好的解决方案使用toFixed():-
var amount = 40.73;
var total = 'Total is: £' + (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)
例如,如果您输入1
和2
,则结果为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);