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