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。我已经尝试了parseFloat
和parseInt
,但在乘以由变量(dd-dml)组成的变量(dm)时仍显示NaN。 dm是用dd或10-30减去dml的结果。请分享您的解决方案。
我是新来的,我需要帮助,请不要拖钓:)我想在我的网站上添加一个成本计算器。
答案 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 - dml
,dml
的值为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视为一个字符串。