2

早些时候我问过同样的话题,一个简单的计算器,但现在这个线程有点混乱,不再是最新的了。我希望对此感到恼火,但我发现一个新线程很有用。

我有一个 JavaScript 练习要做,那就是编写一个计算器脚本,它的功能与内置的 Windows (7) 几乎相同。这意味着您有一个字段可以输入一些值,而上面的一个小字段显示先前输入的值以及计算操作。

一位用户向我发送了一些我喜欢的代码以满足我的需求,因为它很简单,我尝试对其进行调整。

我目前正在努力让只有一个操作可以工作,但稍后会有其他三个主要操作,平方根等。

现在一切都很好,只有有点令人不安的计算本身没有。例如:如果您输入 5 + 5(或任何其他数字),然后单击等于,则没有任何反应。如果您再次输入任何数字(之前单击加号)然后点击等于,它会给您一个完全随机的结果,或者您之前计算的结果。

这就是我得到的:

var number = 0;                    //the result
var operation = ' ';               //the chosen calculating operation
var temp_Val = 0;                  //the last entered value (for the subdisplay)

var print_equal = function () {
    var displayVal = document.getElementById("display");        
    displayVal.value = number;                                  
};

var num_add = function () {
    var displayVal = document.getElementById("display");        
    temp_Val = displayVal.value;    //saves the value of the display (for the subdisplay)
    console.log(temp_Val);      //schreibt den Wert des Displays auf die Konsole
    number += parseFloat(displayVal.value);  //calculates the result
    operation = '+';             //saves the used operation (for the subdisplay)
    print_subdisplay();          //runs the function that's building the value of the subdisplay
    displayVal.value = "";               //resets the main display
};

var print_subdisplay = function () {
    var subdisplayVal = document.getElementById("subdisplay");
    subdisplayVal.value = temp_Val + operation;    //creates a String with both the first entered value and the operation
};

HTML:

<!-- Displays -->
        <input type="text" name="display" id="display" value="0" class="display">
        <input type="text" name="subdisplay" id="subdisplay" class="subdisplay" readonly>

<!-- Calculating operations -->
        <input type="button" onclick="print_equal()" id="equal" value="=">
        <input type="button" onclick="num_add()" id="plus" value="+">

<!-- Reset -->
        <input type="button" value="C" onClick="reset()" class="reset">

这是 JSFiddle:http: //jsfiddle.net/hJfFd/1/

如果你能帮助我,我会觉得非常好,因为我坐在这里试图让它工作近 4 个小时(包括研究)。提前致谢!

4

4 回答 4

0

代码中存在逻辑错误。如果您按照以下步骤顺序操作,它将按预期工作:

1) 输入 5

2) 点击 +

3) 输入 5

3) 再次点击 +

4) 点击 =

此时10将出现在“输出”框中。因此,您的 print_equal() 函数需要在将结果打印到屏幕之前以某种方式执行最终计算,因为没有执行最后一个操作(在这种情况下为 + 操作)。

于 2013-09-27T20:54:43.713 回答
0

这是一个解决方案,可以帮助您开始实施计算器的其余部分。我建议您再次浏览并添加您的评论。并了解每一行代码的作用。一个好的方法是,如果你对一行代码感到困惑,把它拿出来,然后玩弄计算器,你可能会明白为什么要添加那行代码等等。祝你好运!

var number = 0;                                                 //the result
var operation = ' ';                                            //the chosen calculating operation
var temp_Val = 0;                                               //the last entered value (for the subdisplay)

var print_equal = function () {
  var displayVal = document.getElementById("display");
  var subdisplayVal = document.getElementById("subdisplay");
  if(subdisplayVal.value == '')
    return false;
  temp_Val = displayVal.value;
  if(temp_Val == '')
    temp_Val = 0;
  if(operation == '+')
    number += parseFloat(temp_Val);
  subdisplayVal.value = ""; 
  displayVal.value = number;
  temp_Val = 0;
  number = 0;
  operation = ' ';
};

var num_add = function () {
  var displayVal = document.getElementById("display");      
  temp_Val = displayVal.value;
  if(temp_Val == '')
    return false;
  if(operation == '+')
    number += parseFloat(displayVal.value);
  else
    number = parseFloat(displayVal.value);                      
  operation = '+';                                          
  print_subdisplay();                                           
  displayVal.value = "";                                        
};

var print_subdisplay = function () {
  var subdisplayVal = document.getElementById("subdisplay");
  subdisplayVal.value = number + operation;
};

function reset() {
  number = 0;
  operation = ' ';
  var displayVal = document.getElementById("display");
  displayVal.value = "0";
  var subdisplayVal = document.getElementById("subdisplay");
  subdisplayVal.value = ""; 
}

http://jsfiddle.net/CpvqR/21/

于 2013-09-27T21:08:17.880 回答
0

您当前的实现有两个简单的问题。

1)您需要确保解析从displayVal. 如果不这样做,您将把字符串存储在您认为是整数的变量中(因为 JavaScript 是松散类型的)。将您分配到的行替换temp_Val

temp_Val = parseFloat(displayVal.value);

2)您的=按钮需要进行实际的数学运算(或者至少这是大多数计算器的工作方式)。将print_equal函数的第二行替换为

displayVal.value = parseFloat(displayVal.value) + temp_Val;

显然,您还需要担心其他一些事情(例如使用正确的操作),但这至少应该能让您继续前进。

于 2013-09-27T21:20:07.993 回答
0

前几天我用 js css3 和 html5 写了一个非常简单的 calc

例子

http://jsfiddle.net/trjsJ/

js

function calc(e){
 var a=e.target.innerText,b=this.firstChild;
 b.value=a=='='?eval(b.value):a=='C'?'':b.value+a;
}
var gui=document.createElement('div');
gui.className='clc';
gui.innerHTML='<input><div>'+('789+456-123*C0./='.split('').join('</div><div>'))+'</div>';
gui.addEventListener('click',calc,false);

window.onload=function(){
 document.body.appendChild(gui);
}

css3

body,html{
 height:100%;
 margin:0;
 padding:0;
 background-color:#666;
}
*{
 box-sizing:border-box;
}
.clc{
 width:256px;
 height:320px;
 clear:both;
}
.clc>*{
 border:4px solid #666;
 border-radius:4px;
 font:normal normal bold 20px/56px Arial,Helvetica,sans-serif;
 border-radius:10px;
}
.clc>input{
 width:100%;
 height:20%;
 text-align:right;
 padding:0 20px;
}
.clc>div{
 width:25%;
 height:20%;
 background-color:#5a5a5a;
 color:#fff;
 text-align:center;
 float:left;
}
.clc>div:nth-child(4n+1){
 background-color:#f36573;
}
.clc>div:nth-last-child(1){
 width:100%;
 background-color:#ffb343;
}
于 2013-10-31T14:01:55.580 回答