Javascript计算不起作用 - 显示NaN,Infinity或什么都没有

时间:2016-11-29 09:10:12

标签: javascript

我试图让这个计算起作用,但是我正在努力奋斗。答案要么是NaN,Infinity,要么根本没有答案。不知道我哪里出错了。任何帮助非常感谢。我希望实现的计算是(mybox1 / mybox2-(mybox3 / 100))* 20

https://jsfiddle.net/kosw1mzn/

<html>
<head>
<meta charset="UTF-8">
<title>Untitled Document</title>
</head>

<body>

<input id="box1" type= "number">
<input id="box2" type= "number">
<input id="box3" type= "number">
<input id="box4" type= "number">
<input id="display" readonly>

<script>
function calculate()
{
    var myBox1 = document.getElementById('box1').value;
    var myBox2 = document.getElementById('box2').value;
    var myBox3 = document.getElementById('box3').value;
    var myBox4 = document.getElementById('box4').value;
    var result = document.getElementById('display');
    var myResult = ((myBox1/myBox2-(myBox3/100))*20);
    result.value = myResult;
}
</script>

</body>
</html>

3 个答案:

答案 0 :(得分:0)

如果没有返回+-Infinityx/0其中x!== 0)或NaN0/0),则不能除以0,因此请设置值的默认值parseInt结果不是数字。

我添加了一个parseElementValue函数来保存重复自己。

更新为包括舍入到2个小数位的请求,并在开始时将结果输入值设置为空

<强> FIDDLE

var result = document.getElementById('display');
function calculate()
{
    var myBox1 = parseElementValue(document.getElementById('box1').value);
    var myBox2 = parseElementValue(document.getElementById('box2').value);
    var myBox3 = parseElementValue(document.getElementById('box3').value);
    var myBox4 = parseElementValue(document.getElementById('box4').value);
    var myResult = 0;
    if(myBox2 > 0){
        myResult = ((myBox1/myBox2-(myBox3/100))*20);
    }
    result.value = myResult.toFixed(2);
}

function parseElementValue(value){
    return parseInt(value, 10) || 0;
}
result.value = '';

感谢Grundy对Infinity vs NaN返回0分母分区的澄清的评论

答案 1 :(得分:0)

试试这个:

function calculate()
{
    var myBox1 = document.getElementById('box1').value;
    var myBox2 = document.getElementById('box2').value;
    var myBox3 = document.getElementById('box3').value;
    var myBox4 = document.getElementById('box4').value;
    var result = document.getElementById('display');
    var myResult = ((+myBox1/(+myBox2 || 1)-(+myBox3/100))*20);
    result.value = myResult;
}

使用Unary +将字符串转换为数字。除以0由OR 1保护。

<强>更新

小提琴更新为圆形结果到2位小数。

请参阅小提琴:https://jsfiddle.net/free_soul/kosw1mzn/8/

答案 2 :(得分:-2)

我正在检查你的例子,似乎它会返回正确的结果。我正在添加按钮进行处理计算

<input type="button" value="Calculate" onclick="calculate()"/>

https://jsfiddle.net/kosw1mzn/2/

请澄清您面临的问题?