在NodeJS中使用process.argv时,行为不一致
这是我第一天学习节点,我试图实现一个程序,返回总和为N个数字,其中N是input。 我使用Ubuntu 14.04,使用软件包pipe理器(v0.10.25)安装了Node。 这是我的代码
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
执行代码将返回正确答案。 我在这里错过了什么?
process.argv[2]
将是一个string 。 当你在一个string中使用*
时,它被隐含地转换成一个数字,但当你使用+
时,当一个操作数是一个string时,它是string连接。
举个例子,如果你在命令行中input了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]); // ------------^^^^^^^^----------------^
取决于你的需求。 这个答案有一个如何这些不同的破败。
process.argv
参数以stringforms出现。
所以你会得到相同的结果,通过设置myNumber
像这样:
var myNumber = "5";
相反,您需要使用parseInt将stringparsing为整数。 或者其他parse*
函数,如果你想支持浮动等
process.argv[2]
被解释为一个string。
所以'5' * ('5'+1) * 0.5
变成'5' * '51' * 0.5
变成5 * 51 * 0.5
(即127.5)。
确保将其转换为数字!
var myNumber = Number(process.argv[2])