在添加由另一个变量组成的变量时获取NaN

时间:2012-12-19 03:54:31

标签: javascript nan

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的结果。请分享您的解决方案。

我是新来的,我需要帮助,请不要拖钓:)我想在我的网站上添加一个成本计算器。

5 个答案:

答案 0 :(得分:1)

对我来说似乎很好。

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

答案 1 :(得分: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

答案 2 :(得分:0)

此处获得NaN的唯一原因是dd的值为NaN。由于dm的值定义为dd - dmldml的值为Number值,30

parseFloat()始终返回Number值。仅在必要时,-运算符才会将其操作数转换为Number。因此,根据定义,dm的值必须是Number值。

但是,NaN是一个Number值(typeof NaN === "number"),并且它是“有毒的”:一旦操作数为NaN,所有后续算术运算的结果是NaN

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

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

答案 3 :(得分: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

答案 4 :(得分:0)

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

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

parseInt(value,10) - 你知道因为你使用了parse float,但是两个管道和零可能会阻止你进入NaN,因为JavaSrcipt可能会将0视为一个字符串。