2016-12-19 11 views
2

これは私の最初の学習ノードです。Nを入力とするN個の数値に合計を返すプログラムを実装しようとしています。私は、Ubuntu 14.04を、パッケージマネージャ(v0.10.25)を使用してインストールされたノードとともに使用しています。ここに私のコードのプログラムファイルがSumToN.jsあるNodeJSでprocess.argvを使用したときの動作が不一致

var myNumber = process.argv[2] 
var sumToMyNumber = myNumber*(myNumber+1)*0.5 
console.log(sumToMyNumber) 

であり、出力はvar myNumber = 5戻って正しい答えでコードを実行する、しかし

nodejs SumToN.js 5 // 127.5 

です。私はここで何が欠けていますか?

答えて

2

process.argv[2]は、文字列となります。文字列に*を使用すると暗黙的に数値に変換されますが、オペランドの1つが文字列の場合は+を使用すると文字列連結になります。コマンドラインで20を与えた場合

だから、たとえば、その計算は、2010年、ある

var sumToMyNumber = 20*(201)*0.5 

ある

var sumToMyNumber = "20"*("201")*0.5 

ある

var sumToMyNumber = "20"*("20"+1)*0.5 

なりあなたはおそらく210を望んでいたでしょう。

依存

var myNumber = +process.argv[2]; 
// ------------^ 

または

var myNumber = Number(process.argv[2]); 
// ------------^^^^^^^---------------^ 

または

var myNumber = parseFloat(process.argv[2]); 
// ------------^^^^^^^^^^----------------^ 

または

var myNumber = parseInt(process.argv[2]); 
// ------------^^^^^^^^----------------^ 

計算を行う前に、数にmyNumber変換あなたの必要に応じて。 This answerには、それらの違いが分かっています。

0

process.argv引数は文字列として入力されます。

ですから、このようなmyNumberを設定することで、プログラム内で同じ結果が得られます:

var myNumber = "5"; 

代わりに、整数に文字列を解析するためにparseIntを使用する必要があります。浮動小数点数などをサポートしたい場合はparse*関数を使用します。

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])

関連する問題