[脚本计算器中的括号()?

问题描述 投票:0回答:1

我创建了一个JavaScript计算器。这是它的图像

enter image description here

但是正面临方括号()的问题。和点(。)

我想要的是,当我首先单击括号按钮时,它会给我一个开括号,然后如果再次单击,它应该给一个右括号,依此类推,就像在普通计算器中一样,我希望程序知道如何处理带括号。

<input type="text" id="t1" class="tt">
<input type="button" onClick="myFun6()" value="()">
<input type="button" onClick="myFun7()" value=".">

<script>
function myFun6()
{

var prac = "()";
document.getElementById("t1").value+=prac;

}
</script>

我的第二个问题是关于句点的。我本来想去上班,但仍然有问题。如果没有元素,则单击点按钮将显示为“ 0”。但是,如果我再次单击,结果将为“ 0.0”。等等。

function myFun7()
{


var d=document.getElementById("t1").value;

if(d.length - 1)
{
    d="0.";
    document.getElementById("t1").value+=d;
}
else
{
    d=".";
    document.getElementById("t1").value+=d;
}

}

javascript calculator
1个回答
0
投票

如果您想为“()”设置一个按钮:一个简单的解决方案是创建一个开关,该开关将交替显示是否需要打开或关闭。

    let bracketSwitch = false;

    function myFun6(){
        var prac;
        if(!bracketSwitch){
            prac = "("
        } else {
            prac = ")"
        };
        bracketSwitch = !bracketSwitch;
        document.getElementById("t1").value+=prac;
    }

如上所述,您也可以将交换机存储在本地或会话存储中。尽管此解决方案可能不是您真正想要的。正如@deceze所提到的,这将不允许嵌套括号...

您将必须包含一些较重的逻辑以允许嵌套括号。这是我想到的。这可能并不能完全解决所有的问题,当然还有其他(更好)的方法...但这至少可以使您入门:

let bracketSwitch = false;
function myFun6_2(){
    var input = document.getElementById("t1").value;

    if(input.length >= 1){ //already something in the input box
        var index = input.charAt(input.length-1);

        if(!isNaN(parseInt(index)) && bracketSwitch){ //index is a number
            document.getElementById("t1").value += ')';
            bracketSwitch = !bracketSwitch;
        } else if((!isNaN(parseInt(index)) && !bracketSwitch) || index === "."){
            document.getElementById("t1").value += 'x(';
            bracketSwitch = !bracketSwitch;
        }else {
            document.getElementById("t1").value += '(';
            if(!bracketSwitch){ //if the switch was off
                bracketSwitch = !bracketSwitch;
            };
        }
    } else { //empty input box
        document.getElementById("t1").value += '(';
        bracketSwitch = !bracketSwitch;
    }
};

此else块的注释:

else if((!isNaN(parseInt(index)) && !bracketSwitch) || index === "."){
    document.getElementById("t1").value += 'x(';
    bracketSwitch = !bracketSwitch;

在我手机上的计算器上,如果我有“ 5”并打括号,则会加上“ X(”。得出的最终结果是“ 5x(”。或者如果我有“ 5”。它将得到“ 5.x( ”。您可能不想对自己做同样的事情。我也可以辩称,在这种情况下不应添加任何括号。

只要用户不退格超过先前已更改开关的位置,该开关就可以正常工作。这里需要一些附加的逻辑以确保开关处于正确的位置。如果按下“ c”按钮,则还需要重置开关。

关于点问题:如以上注释中所述,您的代码将用“ 0”替换输入的任何单个值。这是一个解决方案,似乎可以满足您的要求。

function myFun7(){
    var d=document.getElementById("t1").value;
    var dot = d.includes('.');
    if(d.length === 0){
        document.getElementById("t1").value+= "0.";
    } else if(!dot){ //this checks to make sure only one dot has been used
        document.getElementById("t1").value+= ".";
    }


}
© www.soinside.com 2019 - 2024. All rights reserved.