2017-07-18 9 views
0

私は次の問題の助けをありがとうと思います。私の電卓に文字列を入力すると、Nanに次の整数の変数-1 + 2と-1 + -2が表示され、Nanが表示されます。私はMath.abs()を使って自分の価値をマイナスまたはプラスに変更しました。正常に動作するようプラス/マイナスボタンを得ることができません

var infoBox = document.getElementById('screen'); 
 

 
function addscreen(x) { //x verteenwoordig die knopie wat gedruk word bv 1 en dan by vorige waarde gevoeg word van infoBox; 
 
    infoBox.value = infoBox.value + x; 
 
    if (x === 'C') { 
 
    infoBox.value = ''; 
 
    } 
 
} 
 

 
function changesign(x) { 
 
    changeNum(); 
 
} 
 

 
function changeNum(x) { 
 
    x = infoBox.value; 
 
    x = Math.sign(x); 
 
    if (x === 1) { 
 
    x = infoBox.value; 
 
    x = -Math.abs(x); 
 
    infoBox.value = x; 
 
    } else { 
 
    x = infoBox.value; 
 
    x = Math.abs(x); 
 
    infoBox.value = x; 
 
    } 
 
} 
 

 
function product(x) { 
 
    x = infoBox.value; 
 
    x = eval(x); 
 
    infoBox.value = x; 
 
} 
 

 
function mutiplyBy() { 
 
    x = infoBox.value; 
 
    x = eval(x * x); 
 
    infoBox.value = x; 
 
} 
 

 
function backspace() { 
 
    var character = infoBox.value; 
 
    var size = character.length - 1; 
 
    var newCharacter = character.substring(0, size); 
 
    infoBox.value = newCharacter; 
 
} 
 

 
function mutiplyBy2(x) { 
 
    x = infoBox.value; 
 
    x = x/100; 
 
    infoBox.value = x; 
 
} 
 

 
/*function mutiplyBy2 (x){ 
 
\t x = infoBox.value; 
 
\t x = x/100 * 10; 
 
\t infoBox.value = x.toFixed(1); 
 
}*/ 
 

 

 
function sqrt(x) { 
 
    x = infoBox.value; 
 
    x = Math.sqrt(x); 
 
    infoBox.value = x; 
 
}
#move { 
 
    margin-top: 150px; 
 
    margin-left: auto; 
 
    margin-right: auto; 
 
    border: 5px solid grey; 
 
    border-radius: 10px; 
 
    background: grey; 
 
} 
 

 
body { 
 
    background-image: url("https://static.pexels.com/photos/27665/pexels-photo-27665.jpg"); 
 
    background-size: 1600px 780px; 
 
    background-repeat: no-repeat; 
 
} 
 

 
h1 { 
 
    text-align: center; 
 
} 
 

 
#dimensions { 
 
    width: 165px; 
 
} 
 

 
.size2 { 
 
    width: 30px; 
 
    cursor: hand; 
 
    cursor: pointer; 
 
}
<h1>FreecodeCamp Calculator Project</h1> 
 
<table id="move"> 
 
    <form> 
 
    <tr> 
 
     <th> 
 
     <input type="text" id="screen" disabled> 
 
     </th> 
 
    </tr> 
 
    <tr> 
 
     <td> 
 
     <input class="size2" type="button" value="MC"> 
 
     <input class="size2" type="button" value="MR"> 
 
     <input class="size2" type="button" value="MS"> 
 
     <input class="size2" type="button" value="M+"> 
 
     <input class="size2" type="button" value="M-"> 
 
     </td> 
 
    </tr> 
 
    <td> 
 
     <input class="size2" type="button" value="&#8592;" onclick="backspace()"> 
 
     <input class="size2" type="button" value="CE" onclick="backspace()"> 
 
     <input class="size2" type="button" value="C" onclick="addscreen('C')"> 
 
     <input class="size2" type="button" value="&plusmn;" onclick="changesign('&plusmn')"> 
 
     <input class="size2" type="button" value="&#8730;" onclick="sqrt()"> 
 
    </td> 
 
    </tr> 
 
    <tr> 
 
     <td> 
 
     <input class="size2" type="button" value="7" onclick='addscreen("7")'> 
 
     <input class="size2" type="button" value="8" onclick="addscreen('8')"> 
 
     <input class="size2" type="button" value="9" onclick="addscreen('9')"> 
 
     <input class="size2" type="button" value="/" onclick="addscreen('/')"> 
 
     <input class="size2" type="button" value="%" onclick="mutiplyBy2()"> 
 
     </td> 
 
    </tr> 
 
    <tr> 
 
     <td> 
 
     <input class="size2" type="button" name="" value="4" onclick="addscreen('4')"> 
 
     <input class="size2" type="button" name="" value="5" onclick="addscreen('5')"> 
 
     <input class="size2" type="button" name="" value="6" onclick="addscreen('6')"> 
 
     <input class="size2" type="button" name="" value="*" onclick="addscreen('*')"> 
 
     <input class="size2" type="button" name="" value="x^2" onclick="mutiplyBy()"> 
 
     </td> 
 
    </tr> 
 
    <tr> 
 
     <td> 
 
     <input class="size2" type="button" name="" value="1" onclick="addscreen('1')"> 
 
     <input class="size2" type="button" name="" value="2" onclick="addscreen('2')"> 
 
     <input class="size2" type="button" name="" value="3" onclick="addscreen('3')"> 
 
     <input class="size2" type="button" name="" value="-" onclick="addscreen('-')"> 
 
     <input class="size2" type="button" name="" value="=" onclick="product()"> 
 
     </td> 
 
    </tr> 
 
    <tr> 
 
     <td> 
 
     <input class="size2" type="button" name="" value="0" onclick="addscreen('0')"> 
 
     <input class="size2" type="button" name="" value="." onclick="addscreen('.')"> 
 
     <input class="size2" type="button" name="" value="+" onclick="addscreen('+')"> 
 
     </td> 
 
    </tr> 
 
    </form> 
 
</table>

+3

入力から値を取得すると、その値は強くなります。 ** parseInt **を使用して整数に変換します。 – user2182349

+1

parseIntは実行しません。すべての入力から文字列を作成するためです。あなたがする必要があるのは、最後の価値の種類を別々にしておき、それを変更することです。そうすれば、それを追加して後で操作することができます。 Btw:わかりやすくするために、コードを正しくインデントすることをお勧めします:) – lumio

答えて

0

私はあなたが意味的な問題を抱えていると思います。あなたは全体の表現を取るが、通常の計算機では、±は最後の数字の符号を変えることを意味する。

function changeNum() { 
 
    let x = infoBox.value; 
 
    let regex = /^\d+$|(.*)([-+]\d+)$/; 
 
    let last = (x.match(regex)); 
 
    if (last !== null) { 
 
    let n = isNaN(last[2]) ? last[0] : last[2]; //1st part of the regex ? 
 
    let newVal = (eval(-eval(n))); // Sign inversion 
 
    if (newVal > 0) // Force to print the + behind the number 
 
     newVal = "+" + newVal; 
 
    infoBox.value = x.replace(regex, "$1" + newVal); 
 
    } 
 
}

正規表現xplantation: 正規表現(「1」のような)の発現を開始番号を取るか、それを最後の数字を取ることを意味し、私はあなたのchangeNum機能は次のように変更します記号(-1 + 2のように、+2がかかります)。

三項式は、どの場合に存在するかを知ることを可能にする。

良い一日を。

0

以下のように変更changeNum:

function changeNum(x) { 
 
    x = infoBox.value; 
 
    if(!isNaN(x)){ 
 
    x = Math.sign(x); 
 
    if (x === 1) { 
 
     x = infoBox.value; 
 
     x = -Math.abs(x); 
 
     infoBox.value = x; 
 
    } else { 
 
     x = infoBox.value; 
 
     x = Math.abs(x); 
 
     infoBox.value = x; 
 
    } 
 
    } 
 
}

+0

Cylexxの解決策がそれを解決しました。このコーディングの問題を手伝ってくれてありがとう、皆さん。 – AJAX101

関連する問題