2012-12-19 73 views
5
var dml = 30 
var dd = parseFloat(document.getElementById("DriverD").value)  <----- Only numbers like 10 
var dm = dd-dml 

alert((dd - dml) * 0.75) <----- This works 
alert(dm * 0.75)   <----- This returns NaN 
alert(typeof(dm))  <----- This show that dm is a Number 

我不知道为什么我总是收到NaN。我已经尝试过parseFloatparseInt,但在乘以由变量(dd-dml)组成的变量(dm)时仍显示NaN。 dm是用dd或10-30减去dml的结果。请分享您的解决方案。添加NaN时添加由另一个变量组成的变量

我在这里是新来的,我需要帮助,请不要巨魔:)我想增加一个成本计算器到我的网站。

+1

'typeof NaN'也是''number'',你能提醒(dm)'而不是最后一个吗? – Bergi

+2

适用于我:http:// jsfiddle。net/HfCrD/ –

+6

'DriverD'元素的** real **值是什么 –

回答

0

试试这个

两个操作数必须转换为parseFloat

<input type="text:" value="10" id="DriverD" /> 

var dml = parseFloat(30); 
var dd = parseFloat(document.getElementById("DriverD").value); 
var dm = dd-dml; 
alert(dm * .10); 

结果是-.2

+0

对不起,在做alert时仍然得到NaN(dm * .10):(做了alert((dd-dml)*时不返回NaN)10)虽然 – Jay

+0

我试过了,得到了正确的答案。http ://jsfiddle.net/LChFk/ –

+0

请重新加载您的浏览器(ctrl + shft + R) –

1

这似乎没什么问题。

我想告诉其他可能的问题:您不检查是否document.getElementById("DriverD").value是一个数字或不。如果用户输入字符串或其他类型,则会导致问题。

+0

感谢您的快速响应,我将在未来为此提供错误处理程序:)但现在我在解决此问题时使用了数字10。 – Jay

+0

我希望我能帮上忙。但没有使用JavaScript。 – smttsp

+0

我知道了!我有多愚蠢。在我的实际网站上,我首先在DD和DML之前宣布DM。工作精美现在感谢客人! :D – Jay

0

这里得到NaN的唯一原因是dd的值是NaN。因为dm的值定义为dd - dmldml的值是Number的值,所以30

parseFloat()总是返回一个Number值。只有在必要时,-运算符才会将其操作数转换为Number。所以dm的值必须定义为Number的值。

然而,NaNNumber值(typeof NaN === "number"),它是“有毒”:一旦一个操作数是NaN,所有以下的算术运算的结果是NaN

这意味着parseFloat()必须返回NaN,这意味着parseFloat()的参数不能被解释为十进制数表示的前缀。

一个常见原因是用户输入了数千个分隔符(不支持)或小数点逗号,而只支持小数点。

+0

我的糟糕之处在于,在声明dd和dml之前,我首先声明了dm(var dm = dd - dml),所以它就像是在执行var dm = null - null。它现在工作正常,我重新排列了我的声明的顺序。:) – Jay

+0

在这种情况下,它等同于'var dm = undefined - undefined',其右侧等价于Number(undefined) - Number(undefined) ','NaN - NaN',最后是'NaN'。变量实例化在变量初始化之前发生。变量被实例化为未定义类型的undefined值,而不是Null对象类型的null值。 – PointedEars

0

尝试这个

var dml = 30; 
    var dd = parseFloat(document.getElementById("DriverD").value) ; <----- Only numbers like 10 
    var dm=0; 
    dm = dd-dml; 

    alert((dd - dml) * 0.75); <----- This works 
    alert(dm * 0.75);   <----- This returns NaN 
    alert(typeof(dm));  <----- This show that dm is a Number 
0

我是一个新手,但我认为这是错误类型,解决方法:

var someV = parseInt(document.getElementById("some-v-id").value, 10) || 0, 

parseInt函数(价值10) - 你知道是因为你使用了parse float,但是两个管道和零可能会阻止你从NaN进入,因为JavaSrcipt可能将0当作字符串处理。