簡易電卓
この電卓は数値,演算子( 「+」 「-」 「/」 「*」 )
を入力し 「=」 を押したときに計算します。
計算はeval
関数で実行。 注) 「/」は「÷」、「*」は「×」です。
普通、私たちが使っている 電卓は例えば "1+2"を押して「×」を押すと計算されて"3"が
表示され次に"4"を入れ「=」 を押すと "3×4"で計算結果は"12"になります。
が
この電卓は"1+2×4" で四則演算では乗除算が優先されるので"2×4"が
先に計算され"1+8" で "9"になります。//昔習った算数と同じ結果!!
乗算演算子 ("*")
は加算演算子("+")
より高い優先順位を持つので、最初に評価されます。
またこの電卓はボタンを押さずに、演算ボックスに計算式を入力して「=」ボタンを押すと
計算することができます。
heteml
【ちょ〜簡単設置】初心者でもすぐ使える、無料アクセス解析の決定版!
ロリポップ!のドメインは選べる全85種類!!
☆さくらのレンタルサーバ ビジネスプロ☆
サンプルソース
<html>
<head>
<title>javascriptで電卓</title>
<style type="text/css">
<!--
#outDiv{ position: relative ; /* 相対配置 */
}
.calTbc{ /* 電卓本体 */
background-color: #c5f1fe; /* 背景色 */
border-style: solid; /* 枠線 実線 */
border-width: 2px 6px 6px 2px; /* 枠線 幅 上,右,下,左 */
border-color: #7e7e7e #a9a9a9; /* 枠線 色 上下,左右 */
-moz-border-radius: 10px; /* 角丸 Firefox */
-webkit-border-radius: 10px; /* 角丸 Safari、Google Chrome */
border-radius: 10px; /* 角丸 IE9 */
font-size: 16px; /* 文字のサイズ */
}
.calTbc input{ /* 数値、演算子ボタン */
width: 55px; /* ボタンの幅 */
color: #ffffff; /* 文字の色 */
background-color: #0000cd;
text-align: center; /* 文字の水平位置 */
border-width: 3px;
-moz-border-radius: 7px;
-webkit-border-radius: 7px;
border-radius: 7px;
font-size: 1em;
font-weight: bold; /* 文字の太さ */
cursor: pointer; /* カーソルの形状 */
}
.calTbc #dispBox{ /* 演算ボックス */
width: 165px;
color: navy;
background-color: #ffffda;
padding-right: 3px;/* 内側余白 */
margin-left: 3px;
text-align: right;
border: 7px #a9a9a9 inset;
font-size: 1.3em;
font-weight: bold;
ime-mode: inactive; /* 入力モード切替 半角,英数 */
}
.calTbc td{
padding: 0px 0px 5px 5px; /* 内側余白 上,右,下,左*/
}
.calTbc th{
padding: 5px 4px; /* 内側余白 上下,左右*/
}
.calTbc #aC{ /* ACボタン */
color: white;
background-color: #cc0000;
margin-right: 4px;
}
.calTbc input[type=button]:hover,
.calTbc #aC:hover{ /* ボタンにマウスが乗ったら背景色変更 */
background-color: #20b2a1;
}
input[type="button"]::-moz-focus-inner{ /* Firefoxのボタンの点線を消す */
border :0px;
}
#opeBox{ /* 演算子表示 ボックス */
width: 15px;
height: 20px;
position : absolute;
top: 16px;
left: 19px;
font-weight: bold;
text-align: center;
color: #ff00ff;
font-size: 1.5em;
}
#resDiv{ /* 計算結果表示ボックス */
width : 250px;
position : absolute;
top : 0px;
left : 290px;
border:1px solid gray;
padding :7px;
color : #000000;
background-color :#fff;
font-size : 1em;
}
#resDiv input{ /* 計算結果表示ボックス クリアボタン */
width : 20px;
height : 20px;
background-color :#ffffe0;
margin-left : 163px;
}
-->
</style>
<script language="JavaScript">
<!--
var eqFlg="false"; // 「=」 押されたら eqFlg="true"。
var opeVal=""; // 算術演算子格納。
var tenFlg="false"; // 「.」小数点 押されたら tenFlg="true"。
var chkStr=""; // 入力値の取り出し。
var chkNan=""; // 文字,数値の判別格納。
function push(num){ // 数値,又は「.」ボタンが押された時。numはボタンの値。
H_dispBox=document.getElementById("dispBox"); // 演算ボックス。
H_opeBox=document.getElementById("opeBox"); // 演算子表示ボックス。
// 演算ボックスが"0"のとき "0" か "."が押されたら "0."を表示。(1)
if(( H_dispBox.value=="0"&& num =="0")||( H_dispBox.value=="0"&& num ==".")){
num="0.";tenFlg="true"; }
// 演算ボックスが"0"のとき "0"以外の値を押したら演算ボックスをクリア。
if(H_dispBox.value =="0"&&num !="0"){H_dispBox.value="";}// 新規 num を受け入れ。
if(tenFlg=="true"&& num =="."){num="";} // 小数点2度押し阻止。(2)
//BSキーを押したときの処理。(3)
chkStr=H_dispBox.value.slice(-1); //演算ボックスの最後尾の値,取り出し。
chkNan=isNaN(chkStr);//文字,数値の判別 isNaNは,文字ならtrue,数値ならfalseを返す。
if(chkNan==true && chkStr!="."){ //最後尾が演算子の時。
if(num=="."||num=="0"){num="0.";tenFlg="true";} //numが "."か "0"なら"0."を表示。
}
// 「=」のあと 演算子が押されてなければ、演算ボックスをクリア。
if(eqFlg=="true"&&opeVal==""){ H_dispBox.value=""; // 新規 numを表示。
if(num=="."||num=="0"){num="0.";tenFlg="true";} // (1)
eqFlg="false"; }
// 「=」のあと 演算子押されていれば計算継続。
if(opeVal !=""){
if(num=="."||num=="0"){num="0.";tenFlg="true";} // (1)
H_dispBox.value += opeVal+num; // 演算ボックスの値+演算子+ボタンの値。
H_opeBox.innerHTML=""; opeVal=""; // 演算子クリア。
}
else { H_dispBox.value += num; // 演算ボックスの値+ボタンの値。
if(num=="."){tenFlg="true";}
}
}
// Back Spaceキー 後ろから一文字削除。
function bs(){
if(eqFlg=="true"){return} // 「=」 が押されたら無効。
if(opeVal!=""){return} // 演算子 が押されていたら無効。
chkStr=H_dispBox.value.slice(-1); // 演算ボックスの最後尾の値,取得。
if(chkStr=="."){tenFlg="false";} //小数点2度押し防止、解除。(5)
chkNan=isNaN(chkStr); // 文字,数値の判別 文字ならtrue,数値ならfalse。
if(chkNan==true && chkStr!="."){ // 最後尾の文字が演算子なら。(6)
opeVal=chkStr; H_opeBox.innerHTML=opeVal; // 演算子を演算子表示ボックスに退避。
}
chkStr=H_dispBox.value.slice(-2); // 最後から2文字を取得。(7)
if( chkStr=="0."){H_dispBox.value=H_dispBox.value.slice(0, -1);} // "0."なら"."を削除。
H_dispBox.value=H_dispBox.value.slice(0, -1); // 演算ボックスの値,後ろから1文字削除。
if(H_dispBox.value==""){ clr();} //全部削除したら,演算ボックスをリセット。
}
// 算術演算子 「+」 「-」 「/」 「*」 を入力したとき。
function opePush(num){
H_dispBox=document.getElementById("dispBox"); // 演算ボックス。
H_opeBox=document.getElementById("opeBox"); // 演算子表示ボックス。
if( H_dispBox.value=="0"&& num !="-"){return} // "0"のとき"-"以外入力無効。(8)
chkStr=H_dispBox.value.slice(-1); // 演算ボックスの最後尾の値。
chkStr=isNaN(chkStr); // 文字,数値の判別 文字列ならtrue,数値ならfalse。
if(chkStr==true){return} // 演算子なら演算子の, "."なら演算子と"."の入力禁止。(9)
opeVal=num;
H_opeBox.innerHTML=opeVal; // 演算子を表示。
eqFlg="false"; tenFlg="false";
}
// 「=」 を押すと計算します。
function equal(){
try{ // 計算結果出力。
resVal=document.getElementById("resBox");//計算結果表示ボックス
keta=100000; // 小数点以下桁数5桁まで表示。
coDe=H_dispBox.value; // 計算式。
toTal=eval(coDe); // 計算結果 codeがJavaScript式であればその式の値を返す。
toTal=Math.round(toTal*keta) / keta; // 計算結果の小数点以下6桁を四捨五入。
H_dispBox.value=toTal; // 演算ボックスに表示。
resVal.innerHTML=resVal.innerHTML+"<br>"+coDe+" = "+toTal;// 計算結果ボックスに表示。
H_opeBox.innerHTML="";opeVal="";
eqFlg="true";tenFlg="false";
}
catch(e){ // エラー発生(入力値が不正)なら。
H_dispBox.value = e.description;}
}
// try 〜 catch 例外処理、エラー処理
function clr(){ //オールクリア すべての値をリセット。
H_dispBox.value="0";
H_opeBox.innerHTML="";
opeVal="";
eqFlg="false";
tenFlg="false";
}
function tBox(){ // 演算ボックスがフォーカスされたら。
eqFlg="false"; }
function resClr(){ //計算結果表示ボックス クリア。
resVal.innerHTML=""; }
//-->
</script>
</head>
<body>
<div id="outDiv">
<table border="0" class="calTbc" cellpadding="0">
<tbody>
<tr>
<th colspan="3">
<input type="text" value="0" id="dispBox" onfocus="tBox()" title="演算ボックス"></th>
<th><input type="button" value="AC" onclick="clr()" id="aC" title="すべてクリア"></th>
</tr>
<tr>
<td><input type="button" value="7" onclick="push(7)"></td>
<td><input type="button" value="8" onClick="push(8)"></td>
<td><input type="button" value="9" onClick="push(9)"></td>
<td><input type="button" value="÷" onClick="opePush('/')"></td>
</tr>
<tr>
<td><input type="button" value="4" onClick="push(4)"></td>
<td><input type="button" value="5" onClick="push(5)"></td>
<td><input type="button" value="6" onClick="push(6)"></td>
<td><input type="button" value="×" onClick="opePush('*')"></td>
</tr>
<tr>
<td><input type="button" value="1" onClick="push(1)"></td>
<td><input type="button" value="2" onClick="push(2)"></td>
<td><input type="button" value="3" onClick="push(3)"></td>
<td><input type="button" value="−" onClick="opePush('-')"></td>
</tr>
<tr>
<td><input type="button" value="0" onClick="push(0)"></td>
<td><input type="button" value=" ." onclick="push('.')"></td>
<td><input type="button" value="=" onClick="equal()" title="計算 実行"></td>
<td><input type="button" value="+" onClick="opePush('+')"></td>
</tr>
<tr>
<td colspan="3" style="text-align : center;">
<a href="http://javascript123.seesaa.net/" target="_blank">javascript123</a></td>
<td><input type="button" value="BS" onClick="bs()" title="右から一文字消去"></td>
</tr>
</tbody>
</table>
<div id="opeBox"> </div>
<div id="resDiv">
<span>計算結果<input type="button" value="×" onClick="resClr()"
title="計算結果 クリア"></span>
<div id="resBox"></div>
</div>
</div>
</body>
</html>
eval(code) 関数
演算ボックス(テキストエリア)の値は文字列ですが、それがJavaScript式であれば「eval」関数はそれを 数値や演算子として評価し、その式の値を返します。
Math.round
メソッド
このメソッドは小数点以下を四捨五入した整数値を返します。n = Math.round(123.4567); // nは 123を返します。
Math.round()を使って小数点以下 X桁を四捨五入して表示します。
入力チェック
- 演算ボックス
- 先頭が "0"の時,或は「=」を押したあと,"0"又は"."を押すと
"0."を表示。
"0"以外の値を押すとその値を表示。 - 次の演算子が押されるまで、小数点 "."の2度押し禁止。
- BSキーで削除して、残った値の最後尾が演算子の時,
つぎに入力された値が "0"又は"." であれば "0."を表示。 - 演算ボックスに直接入力した場合は入力チェックは解除。
- 先頭が "0"の時,或は「=」を押したあと,"0"又は"."を押すと
"0."を表示。
- BSキーを押したら
- 削除した値が 小数点 "." であれば小数点入力禁止 解除。
- 削除した値が 演算子なら演算子を演算子表示ボックスに退避して
これ以上の削除を禁止。 - 最後から2文字が"0."であればこれを削除。
- 算術演算子 「+」 「-」 「/」 「*」
- 演算ボックスが"0"のとき"-"以外入力無効。
- 最後尾の値が演算子なら演算子の入力禁止。
最後尾の値が小数点 "."なら演算子と小数点の入力禁止。
ロリポップ!のドメインは選べる全85種類!!
☆さくらのレンタルサーバ ビジネスプロ☆
スタイルシートで電卓をデザイン
テーブル
全角/半角 MS-IMEの入力モードの切り替え imeMode
テキストボックス
ボタン
text-align プロパティ
background 背景に関するプロパティ 一覧
borderプロパティ
border-styleプロパティ; ボーダーのスタイルの設定
border-radiusプロパティ 角丸ボーダー
CSS3 を使って角丸コーナーを表現する方法 IE9
paddingプロパティ ボックスの内側の余白
CSS positionプロパティ
カラーコード 色見本