这是我学习Node的第一天,我试图实现一个程序,该程序将总和返回到N个数字,其中N是输入。我使用包管理器(v0.10.25)安装了Node的Ubuntu 14.04。这是我的代码
var myNumber = process.argv[2]
var sumToMyNumber = myNumber*(myNumber+1)*0.5
console.log(sumToMyNumber)
程序文件为SumToN.js
,输出为
nodejs SumToN.js 5 // 127.5
但是,使用var myNumber = 5
执行代码会返回正确的答案。我在这里缺少什么?
答案 0 :(得分:2)
process.argv[2]
将是字符串。当您将*
与字符串一起使用时,它会隐式转换为数字,但是当其中一个操作数是字符串时使用+
时,它就是字符串连接。< / p>
因此,例如,如果您在命令行上给出了20,则该计算变为
var sumToMyNumber = "20"*("20"+1)*0.5
是
var sumToMyNumber = "20"*("201")*0.5
是
var sumToMyNumber = 20*(201)*0.5
这是2010年,你可能想要210。
在进行计算之前将myNumber
转换为数字:
var myNumber = +process.argv[2];
// ------------^
或
var myNumber = Number(process.argv[2]);
// ------------^^^^^^^---------------^
或
var myNumber = parseFloat(process.argv[2]);
// ------------^^^^^^^^^^----------------^
或
var myNumber = parseInt(process.argv[2]);
// ------------^^^^^^^^----------------^
取决于您的需求。 This answer简要介绍了这些差异。
答案 1 :(得分:0)
process.argv
个参数以字符串形式出现。
因此,您可以通过设置myNumber
来获得相同的结果:
var myNumber = "5";
相反,您需要使用parseInt将字符串解析为整数。或者其他parse*
函数,如果你想支持浮点数等。
答案 2 :(得分:0)
process.argv[2]
被解释为字符串。
因此,'5' * ('5'+1) * 0.5
变为'5' * '51' * 0.5
变为5 * 51 * 0.5
(即127.5)。
确保将其转换为数字!
var myNumber = Number(process.argv[2])