做一个简单的JS运算,结果总是NaN,不知道代码哪里有问题...

代码如下:
<html>
<head>
<title>计算</title>
<script>
var a = document.getElementById("t1").value;
var b = document.getElementById("s").value;
var c = document.getElementById("t2").value;
function f() {
if(b == "+") {
var d = "parseFloat(a) + parseFloat(c)";
var e= eval(d);
}else if(b == "-") {
var d = "parseFloat(a) - parseFloat(c)";
var e= eval(d);
}else if(b == "*") {
var d = "parseFloat(a) * parseFloat(c)";
var e= eval(d);
}else {
var d = "parseFloat(a) / parseInt(c)";
var e= eval(d);
}
document.getElementById("t3").value = e;
}
</script>
</head>

<body>

<input type = "text" id = "t1">
<select id = "s">
<option value = "+">+</option>
<option value = "-">-</option>
<option value = "*">*</option>
<option value = "/">/</option>
</select>
<input type = "text" id = "t2">
<input type = "button" value = "运算" onclick = "f()">
<input type = "text" id = "t3">

</body>
</html>

第1个回答  2013-09-08
我重写了下f(),你先看看:

function f() {
var a = document.getElementById("t1").value;
var b = document.getElementById("s").value;
var c = document.getElementById("t2").value;
var d;
if(b == "+") {
d = parseFloat(a) + parseFloat(c);
}else if(b == "-") {
d = parseFloat(a) - parseFloat(c);
}else if(b == "*") {
d = parseFloat(a) * parseFloat(c);
}else {
d = parseFloat(a) / parseInt(c);
}
document.getElementById("t3").value = d;
}
这样有什么好处呢?
1abc三个变量是变动的,所以应该设为局部变量
2eval函数可有可无,因为有运算符
这段代码经过测试通过了本回答被提问者采纳

js 为什么计算结果老是出现NaN
1、操作的两个数,类型不一致 2、有一个值为NaN,计算後为NaN

页面出现了NaN,但是查不出JS哪里错了,怎么办
3. 数值过大。1和2的可能性较大。

JS计算百分率的时候出现NAN现象
NAN:Not a number 你script里面这句a=document.form.INVOICE_TYPE.value;可是在下面的代码里面没有看到有name属性为form的表单,也没有看到有name属性为INVOICE_TYPE的控件,a的值肯定是空的 下面也是 a=Number(document.form.GROSS_PROFIT.value);b=Number(document.form.INCOME_AMOUNT.value);根本就...

为什么我的代码结果里面会有一个NaN? JS
for (var i = 0; i <= input.length; i++) { 这句的意思,就是让i从0递增到input字符串的长度,假如input是3个字符,那么i的递增过程就是0、1、2、3,总共是4次了!最后一次必然就会多出一个莫须有的NaN出来!应该改为 for (var i = 0; i < input.length; i++) { 这样i的递...

js制作简易计算器我怎样优化这个代码,写了很多重复的了
js:\/*** 操作两个值* 传入两个值,得到相应运算符的值*\/function OperatorTwoNum(num1,num2,operator){num1 = parseFloat(num1);num2 = parseFloat(num2);switch(operator){case "+":return num1 + num2;case "-":return num1 - num2;case "*":return num1 * num2;case "\/":...

JQ val() js运算出现NaN 急
刚才测试了一下,是正常的 但是你这个不健壮,应该拿正则之类的过滤一下,只接受数字或者过滤掉除数字外的其他字符 我怀疑是输入的时候混入了其他字符 你可以在input的keyup事件绑定中,添加一句 this.value=this.value.replace(\/\\D\/gi,'');最好放在最前边 ...

JS计算结果为什么没有,显示NaN。
要么你实现先给出 r0a r0b这些数 要么你改一下你后面判断的逻辑 都赋给一个数好了 你在计算过程中又不一定会对所有的都赋值 当然会出问题

JS利用经纬度计算距离结果为NAN
有输入\/获取的是非数字,导致无法当做数字计算

求解答JS isNaN的问题!!
function a(var a,var b){ if(isNaN(a)){ \/\/请输入数字 if(isNaN(b)){ \/\/请输入数字 Alert(a);var c = b*3;Console.log(c);} } }

求助关于时间JS出现NaN错误
"下午 "+hours -12 加入时20:35 问题出在这里,由于有字符串,这里加号功能是字符串连接 结果是"下午8"-12 由于减号不支持字符串操作,只能尝试将"下午8"转换为数字,结果发现无法转换 因此就产生了NaN 意思是 not a number 。即 非数字。因此这个表达式改为:"下午" + (hours - 12)即可 另外...

相似回答