首先,我测试每个变量都有一个数字值:
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
为什么?我试图想出现在几个小时,但没有成功,也许有人有想法,我没有!
谢谢! 萨米
------- ANSWER是在使用+操作数-----------
时解析每个变量var d_path = parseFloat(-d_drop) - parseFloat(sightHeight)+(parseFloat(drop_at_zero)+ parseFloat(sightHeight))* parseFloat(d_distance)/ parseFloat(zeroRange);
答案 0 :(得分: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)
答案 1 :(得分:3)
至少有一个数字是字符串。 sightHeight
是最可能的罪魁祸首,因为它会与drop_at_zero
连接以产生带有两个小数点的“数字” - 这样的“数字”不是数字,因此NaN
。< / p>
解决方案:使用parseFloat(varname)
转换为数字。
答案 2 :(得分: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