Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用JS修复计算器中0的计算?_Javascript_Html - Fatal编程技术网

Javascript 如何使用JS修复计算器中0的计算?

Javascript 如何使用JS修复计算器中0的计算?,javascript,html,Javascript,Html,我正在用javaScript创建一个计算器应用程序,所有算术运算都可以在其中工作(简单算术计算器)。但是数字0有一个问题。如果我执行任何操作,将0保持在数字前面,则显示错误的输出。 同样,如果我在一个数字后执行任何保持0的操作,它给出了正确的答案。 到目前为止,我已经做到了。请查收 <script> function displayNum(n1){ calculator.text1.value = calculator.text1.value + n1; } </scrip

我正在用javaScript创建一个计算器应用程序,所有算术运算都可以在其中工作(简单算术计算器)。但是数字0有一个问题。如果我执行任何操作,将0保持在数字前面,则显示错误的输出。 同样,如果我在一个数字后执行任何保持0的操作,它给出了正确的答案。 到目前为止,我已经做到了。请查收

<script>
 function displayNum(n1){
calculator.text1.value = calculator.text1.value + n1;
 }
</script>

<form name="calculator" >
<input type="text" name="text1" style="text-align:right"><br>
<input type="button" name="num2" value=2 onclick="displayNum(num2.value)">
<input type="button" name="num3" value=3 onclick="displayNum(num3.value)">
<input type="button" name="addnum" value=+ onclick="displayNum(addnum.value)"><br>
<input type="button" name="num4" value=4 onclick="displayNum(num4.value)">
<input type="button" name="num5" value=5 onclick="displayNum(num5.value)">
<input type="button" name="num6" value=6 onclick="displayNum(num6.value)">
<input type="button" name="subnum" value=- onclick="displayNum(subnum.value)"><br>
<input type="button" name="num7" value=7 onclick="displayNum(num7.value)">
<input type="button" name="num8" value=8 onclick="displayNum(num8.value)">
<input type="button" name="num9" value=9 onclick="displayNum(num9.value)">
<input type="button" name="mulnum" value=* onclick="displayNum(mulnum.value)"><br>
<input type="reset" name="reset" value=C>
<input type="button" name="num0" value=0 onclick="displayNum(num0.value)">
<input type="button" name="divnum" value=/ onclick="displayNum(divnum.value)">
<input type="button" name="equal" value== onclick="text1.value=eval(text1.value)">
 </form>

函数displayNum(n1){
calculator.text1.value=calculator.text1.value+n1;
}




如果我提供012+3作为输入,那么输出是13,而不是15,这是不正确的。 实际结果为012+3=13
预期结果应为012+3=15

要解决前导零的问题,我建议将方程式存储在隐藏输入中,并验证是否允许0

let blockLeadingZero = true;
function displayNum(n1){
    calculator.text1.value = calculator.text1.value + n1;
    if(blockLeadingZero && n1 == 0){
        blockLeadingZero = false;
    } else {
        calculator.text2.value = calculator.text2.value + n1;
        if(n1 === "+" || n1 === "-" || 
            n1 === "*" ||n1 === "/"){
            blockLeadingZero = true;
        }
    }
}
因为我们将使用第二个隐藏文本字段进行计算,所以您还需要稍微更改HTML部分。“删除”按钮现在清除文本2字段值,“=”按钮更改两个文本字段的值

<form name="calculator" >
<input type="text" name="text1" style="text-align:right"><br>
<input type="hidden" name="text2" style="text-align:right"><br>
<input type="button" name="num2" value=2 onclick="displayNum(num2.value)">
<input type="button" name="num3" value=3 onclick="displayNum(num3.value)">
<input type="button" name="addnum" value=+ onclick="displayNum(addnum.value)"><br>
<input type="button" name="num4" value=4 onclick="displayNum(num4.value)">
<input type="button" name="num5" value=5 onclick="displayNum(num5.value)">
<input type="button" name="num6" value=6 onclick="displayNum(num6.value)">
<input type="button" name="subnum" value=- onclick="displayNum(subnum.value)"><br>
<input type="button" name="num7" value=7 onclick="displayNum(num7.value)">
<input type="button" name="num8" value=8 onclick="displayNum(num8.value)">
<input type="button" name="num9" value=9 onclick="displayNum(num9.value)">
<input type="button" name="mulnum" value=* onclick="displayNum(mulnum.value)"><br>
<input type="reset" name="reset" value=C onclick="calculator.text2.value=''">
<input type="button" name="num0" value=0 onclick="displayNum(num0.value)">
<input type="button" name="divnum" value=/ onclick="displayNum(divnum.value)">
<input type="button" name="equal" value== onclick="text2.value=eval(text2.value);text1.value=text2.value">
</form>







要解决前导零的问题,我建议将方程式存储在隐藏输入中,并验证是否允许0

let blockLeadingZero = true;
function displayNum(n1){
    calculator.text1.value = calculator.text1.value + n1;
    if(blockLeadingZero && n1 == 0){
        blockLeadingZero = false;
    } else {
        calculator.text2.value = calculator.text2.value + n1;
        if(n1 === "+" || n1 === "-" || 
            n1 === "*" ||n1 === "/"){
            blockLeadingZero = true;
        }
    }
}
因为我们将使用第二个隐藏文本字段进行计算,所以您还需要稍微更改HTML部分。“删除”按钮现在清除文本2字段值,“=”按钮更改两个文本字段的值

<form name="calculator" >
<input type="text" name="text1" style="text-align:right"><br>
<input type="hidden" name="text2" style="text-align:right"><br>
<input type="button" name="num2" value=2 onclick="displayNum(num2.value)">
<input type="button" name="num3" value=3 onclick="displayNum(num3.value)">
<input type="button" name="addnum" value=+ onclick="displayNum(addnum.value)"><br>
<input type="button" name="num4" value=4 onclick="displayNum(num4.value)">
<input type="button" name="num5" value=5 onclick="displayNum(num5.value)">
<input type="button" name="num6" value=6 onclick="displayNum(num6.value)">
<input type="button" name="subnum" value=- onclick="displayNum(subnum.value)"><br>
<input type="button" name="num7" value=7 onclick="displayNum(num7.value)">
<input type="button" name="num8" value=8 onclick="displayNum(num8.value)">
<input type="button" name="num9" value=9 onclick="displayNum(num9.value)">
<input type="button" name="mulnum" value=* onclick="displayNum(mulnum.value)"><br>
<input type="reset" name="reset" value=C onclick="calculator.text2.value=''">
<input type="button" name="num0" value=0 onclick="displayNum(num0.value)">
<input type="button" name="divnum" value=/ onclick="displayNum(divnum.value)">
<input type="button" name="equal" value== onclick="text2.value=eval(text2.value);text1.value=text2.value">
</form>







发现问题=>您没有更改eval参数。 把你的相等按钮换成我的

onclick="text1.value=eval((text1.value).replace(/\b0(\d+)\b/g, '$1'))"
函数displayNum(n1){
calculator.text1.value=calculator.text1.value+n1;
}






发现问题=>您没有更改eval参数。 把你的相等按钮换成我的

onclick="text1.value=eval((text1.value).replace(/\b0(\d+)\b/g, '$1'))"
函数displayNum(n1){
calculator.text1.value=calculator.text1.value+n1;
}






以下是您的问题的解决方案。我已经测试过像0022+30033*002,6/003这样的例子 一切正常。 在求值之前,需要删除text1.value中的前导零。 您可以使用下面的代码

<script>
 function displayNum(n1){
calculator.text1.value = calculator.text1.value + n1;
 }
</script>

<form name="calculator" >
<input type="text" name="text1" style="text-align:right"><br>
<input type="button" name="num2" value=2 onclick="displayNum(num2.value)">
<input type="button" name="num3" value=3 onclick="displayNum(num3.value)">
<input type="button" name="addnum" value=+ onclick="displayNum(addnum.value)"><br>
<input type="button" name="num4" value=4 onclick="displayNum(num4.value)">
<input type="button" name="num5" value=5 onclick="displayNum(num5.value)">
<input type="button" name="num6" value=6 onclick="displayNum(num6.value)">
<input type="button" name="subnum" value=- onclick="displayNum(subnum.value)"><br>
<input type="button" name="num7" value=7 onclick="displayNum(num7.value)">
<input type="button" name="num8" value=8 onclick="displayNum(num8.value)">
<input type="button" name="num9" value=9 onclick="displayNum(num9.value)">
<input type="button" name="mulnum" value=* onclick="displayNum(mulnum.value)"><br>
<input type="reset" name="reset" value=C>
<input type="button" name="num0" value=0 onclick="displayNum(num0.value)">
<input type="button" name="divnum" value=/ onclick="displayNum(divnum.value)">
<input type="button" name="equal" value== onclick="text1.value=eval((text1.value).replace(/\b(0(?!\b))+/g, ''))">
 </form>

函数displayNum(n1){
calculator.text1.value=calculator.text1.value+n1;
}





以下是您的问题的解决方案。我已经测试过像0022+30033*002,6/003这样的例子 一切正常。 在求值之前,需要删除text1.value中的前导零。 您可以使用下面的代码

<script>
 function displayNum(n1){
calculator.text1.value = calculator.text1.value + n1;
 }
</script>

<form name="calculator" >
<input type="text" name="text1" style="text-align:right"><br>
<input type="button" name="num2" value=2 onclick="displayNum(num2.value)">
<input type="button" name="num3" value=3 onclick="displayNum(num3.value)">
<input type="button" name="addnum" value=+ onclick="displayNum(addnum.value)"><br>
<input type="button" name="num4" value=4 onclick="displayNum(num4.value)">
<input type="button" name="num5" value=5 onclick="displayNum(num5.value)">
<input type="button" name="num6" value=6 onclick="displayNum(num6.value)">
<input type="button" name="subnum" value=- onclick="displayNum(subnum.value)"><br>
<input type="button" name="num7" value=7 onclick="displayNum(num7.value)">
<input type="button" name="num8" value=8 onclick="displayNum(num8.value)">
<input type="button" name="num9" value=9 onclick="displayNum(num9.value)">
<input type="button" name="mulnum" value=* onclick="displayNum(mulnum.value)"><br>
<input type="reset" name="reset" value=C>
<input type="button" name="num0" value=0 onclick="displayNum(num0.value)">
<input type="button" name="divnum" value=/ onclick="displayNum(divnum.value)">
<input type="button" name="equal" value== onclick="text1.value=eval((text1.value).replace(/\b(0(?!\b))+/g, ''))">
 </form>

函数displayNum(n1){
calculator.text1.value=calculator.text1.value+n1;
}





一个
的结果是一个字符串。您需要将此字符串转换为一个数字。正如@NinaScholz已经说过的,使用
parseFloat()
转换为float,使用
parseInt()
转换为整数。或者在值前面使用一个简单的字符。为什么数字开头的0返回错误答案。
的结果是字符串。您需要将此字符串转换为一个数字。正如@NinaScholz已经说过的,使用
parseFloat()
转换为float,使用
parseInt()
转换为整数。或者在值前面使用一个简单的字符。为什么数字开头的0返回错误答案。无需使用
eval
。请您解释一下这些部分-replace(/\b0(\d+)\b/g,$1')@Souradip这是筛选字符串012=>12。您可以在这里找到正则表达式定义的详细信息,无需使用
eval
。请您解释一下这些部分-replace(/\b0(\d+)\b/g,$1')@Souradip这是筛选字符串012=>12。您可以从这里找到正则表达式定义的详细信息