1

まず、すべての変数が数値を取得することをテストします。

09-11 18:15:00.420:
       d_drop: -1.178791867393647
  drop_at_zero: 0.0731037475605623
   sightHeight: 4.5
    d_distance: 40
     zeroRange: 10

09-11 18:15:00.420:
       d_drop: true
  drop_at_zero: true
   sightHeight: true
    d_distance: true
     zeroRange: true

function isNumber (o) {
  return ! isNaN (o-0) && o != null;
}

 var d_drop; // in calculation this gets value 1.1789

 var d_path = -d_drop - sightHeight + (drop_at_zero + sightHeight) * d_distance / zeroRange;

console.log("Path: " + d_path + " cm");

そしてログで:

09-11 18:15:00.430: D/CordovaLog(1533): Path: NaN cm

なぜ?私は今数時間それを理解しようとしましたが、成功しませんでした。誰かがアイデアを持っているかもしれませんが、私は持っていません!

ありがとう!サーミ語

-------答えは + オペランドを使用するときにすべての変数を解析することです-----------

var d_path = parseFloat(-d_drop) - parseFloat(sightHeight) + (parseFloat(drop_at_zero) + parseFloat(sightHeight)) * parseFloat(d_distance) / parseFloat(zeroRange);

4

3 に答える 3

3

数字の少なくとも 1 つが文字列です。と連結して小数点以下 2 桁の「数値」を生成するためsightHeight、最も可能性の高い原因です。そのような「数値」は数値ではないため、 .drop_at_zeroNaN

解決策: を使用parseFloat(varname)して数値に変換します。

于 2012-09-11T15:30:12.700 に答える
3

+いずれかのオペランドが文字列の場合、加算演算子は文字列としてキャストします。d_drop作業する前に、すべての入力 ( 、sightHeightなど) を数値として解析する必要があります。

オーバーロードがどのように機能するかのデモを次に示し+ます。減算演算子-がオーバーロードされておらず、常にオペランドを数値にキャストすることに注意してください。

var numberA = 1;
var numberB = 2;
var stringA = '3';
var stringB = '4';

numberA + numberB // 3 (number)
numberA - numberB // -1 (number)
stringA + stringB // "34" (string)
stringA - stringB // -1 (number)
numberA + stringB // "14" (string)
numberA - stringB // -3 (number)

http://jsfiddle.net/jbabey/abwhd/

于 2012-09-11T15:28:11.937 に答える
1

変数名として使用-d_dropしている場合、それがおそらく原因です。変数は文字で始まる必要があります。

var     d_drop = -1.178791867393647,
  drop_at_zero = 0.0731037475605623,
   sightHeight = 4.5,
    d_distance = 40,
     zeroRange = 10;

var d_path = d_drop - sightHeight + (drop_at_zero + sightHeight) * d_distance / zeroRange;

console.log("Path: " + d_path + " cm"); // outputs: Path: 12.613623122848603 cm 
于 2012-09-11T15:34:24.220 に答える