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

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

4

5 回答 5

1

对我来说似乎很好。

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

于 2012-12-19T04:05:43.433 回答
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

于 2012-12-19T04:03:55.150 回答
0

您可以到达NaN这里的唯一原因是 的dd值为NaN。因为 的值dm被定义为dd - dml并且 的值dml是一个Number值,30

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

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

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

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

于 2012-12-19T04:58:53.510 回答
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
于 2015-08-08T11:58:25.650 回答
0

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

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

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

于 2018-01-06T14:00:02.673 回答