Javascriptで数値の和を求める際の処理

このQ&Aのポイント
  • 未入力の場合は「0」とみなして、結果を表示させる方法について教えてください。
  • 下記のプログラムでは、a、b、cの値が未入力の場合、計算結果が表示されません。
  • 求めた和の結果をカンマ区切りに整形して表示する方法について教えてください。
回答を見る
  • ベストアンサー

Javascriptで数値の和を求める際の処理

宜しくお願いします。 下記のプログラムの場合、 a,b,c の何れかの値が一つでも未入力の場合、 計算結果が表示されません。 未入力の場合は「0」とみなして、結果を表示させるには、 どの様にしたらよろしいでしょうか。 ご教授ください。 <script> var sum = 0; sum += a; sum += b; sum += c; var result = sum; var x = result; var y = myFormatNumber(x);function myFormatNumber(x) { var s = "" + x; var p = s.indexOf(".");if (p < 0) { p = s.length; } var r = s.substring(p, s.length); for (var i = 0; i < p; i++) { var c = s.substring(p - 1 - i, p - 1 - i + 1); if (c < "0" || c > "9") { r = s.substring(0, p - i) + r; break;}if (i > 0 && i % 3 == 0) { r = "," + r; } r = c + r; } return r; } document.write(y); </script>

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

>>未入力の場合は「0」とみなし >undefined の場合は「0」にする。 >if( typeof a == "undefined" ){ a = 0; } >if( typeof b == "undefined" ){ b = 0; } >if( typeof c == "undefined" ){ c = 0; } if文を使いたくない場合は三項演算子でも可能です。 var sum = 0; sum += (typeof a == "undefined")? 0 : a; sum += (typeof b == "undefined")? 0 : b; sum += (typeof c == "undefined")? 0 : c;

その他の回答 (3)

  • tracer
  • ベストアンサー率41% (255/621)
回答No.3

示された例がコードの一部なのか全体なのか分かりませんが、少なくとも例をそのまま実行するとエラーでscriptが止まります。a/b/cが未定義だからです。 そもそもa/bcの値はどこから降ってくるのでしょうか? 回答をするにあたり解決に至るまでの課題が多すぎます。 最低限、今のコードがエラーを出しているかどうか気付ける環境を持ってください。 そして、そのエラーが何を示しているかを読み解くところまでまずはたどり着きましょう。 そこまで来てはじめて今回の主題に取り組めます。

回答No.2

sum += a || 0;

回答No.1

>未入力の場合は「0」とみなし undefined の場合は「0」にする。 if( typeof a == "undefined" ){ a = 0; } if( typeof b == "undefined" ){ b = 0; } if( typeof c == "undefined" ){ c = 0; }

関連するQ&A

  • javascript

    var sum = function(){ var result = 0; for(var i = 0; i < arguments.length; i++){ var tmp = arguments[i]; result += tmp; } return result; } document.writeln(sum(1, 3, 5, 7, 9)); このプログラムと function sum(){ var result = 0; for(var i = 0; i < arguments.length; i++){ var tmp = arguments[i]; result += tmp; } return result; } document.writeln(sum(1, 3, 5, 7, 9)); このプログラムでは実行結果は同じですが、 どちらのほうが良いプログラムなのでしょうか?

  • javascriptタグを外部にしたい

    <script type="text/javascript"> <!-- function MM_swapImgRestore() { //v3.0 var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc; } function MM_preloadImages() { //v3.0 var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array(); var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++) if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}} } function MM_findObj(n, d) { //v4.01 var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) { d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);} if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n]; for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document); if(!x && d.getElementById) x=d.getElementById(n); return x; } function MM_swapImage() { //v3.0 var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3) if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];} } //--> </script> DWでデフォルトでロールオーバーイメージを使ってスクリプトが出ています。SEO的にこれを外部に移したいのですが、どうやればいいのでしょうか?CSSと同じ記述でいいのでしょうか・・・ SEO的にはスクリプト自体使わないほうがいいのはわかっています

  • 2つのjavascriptの命令を1ページでやるには。

    Javascriptの超初心者です。 現在サイトを作っておりまして、 あるページに2つのjavascriptの命令を書き込みたいのですが。。。 1つはjavascriptによるプルダウンメニューをグローバルメニューの中に使用しています。 そしてもう1つはそのページ内にスワッピングで小さいサムネイル画像をクリックすると、大きな写真が切り替わるという仕掛けをjavascriptを使用して(dreamweaverの生成したものですが^^;)作ったのですが、 単体ではもちろん動作するのですが、2つ同時に自分なりにまとめてみてもどうにも動作しません。。2つを一緒にまとめるにはどのようなソースを書けばよいのでしょうか? どなたかご教授頂けませんでしょうか?宜しくお願い致します。 以下ソースです。 ●プルダウン用 (外部の長いjavascriptを読み込んでます) <link href="css/import.css" rel="stylesheet" type="text/css" media="all" /> <script src="js/SpryMenuBar.js" type="text/javascript"></script> <script type="text/javascript"><!-- window.onload = function(){ new Spry.Widget.MenuBar("MenuBar1"); } // --></script> ●スワッピング画像用 (直接書き込んでいます) <link href="css/import.css" rel="stylesheet" type="text/css" media="all" /> <script type="text/JavaScript"> <!-- function MM_swapImgRestore() { //v3.0 var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc; } function MM_preloadImages() { //v3.0 var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array(); var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++) if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}} } function MM_findObj(n, d) { //v4.01 var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) { d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);} if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n]; for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document); if(!x && d.getElementById) x=d.getElementById(n); return x; } function MM_swapImage() { //v3.0 var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3) if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];} } //--> </script> 以上の2つはどのようにまとめたら両方動作するのでしょうか?

  • javascriptのタイプミス

    javascript初心者です。以下のコードでどこにミスがあるのか 解りません。どこにあるのでしょうか? このソースをエディタに 貼ると見やすくなると思います。 <!DOCTYPE html> <html> <head> <title>SnakeBite</title> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <script type="text/javascript"> var W, H, S = 20; var snake = [ ], foods = [ ]; var keyCode = 0; var point = 0; var timer = NaN; var ctx; // pointオブジェクト function Point(x,y) { this.x = x; this.y = y; } //初期関数 function init() { var canvas = document.getElementById('field'); W = canvas.width / S; H = canvas.height / S; ctx = canvas.getContext('2d'); ctx.font = "20px sans-serif"; //蚊の初期化 snake.push(new Point(W / 2, H / 2)); //餌の初期化 for (var i = 0 ; i < 10 ; i++) { addFood(); } timer = setInterval("tick()", 200); window.onkeydown = keydown; } //餌の追加 function addFood() { while (true) { var x = Math.floor(Math.random() * W); var y = Math.floor(Math.random() * H); if (isHit(foods, x, y) || isHit(snake, x, y)) { continue; } foods.push(new Point(x, y)); break; } } //衝突判定 function isHit(data, x, y) { for (var i = 0 ; i < data.length ; i++) { if (data[i].x==x && data[i].y==Y) { return true; } } return false; } function moveFood(x, y) { foods =foods. filter(function (p){return (p.x !=x || p.y !=y);}); addFood(); } function tick() { var x = snake[0].x; var y = snake[0].y; switch (keyCode) { case 37: x--; break; //左 case 38: y--; break; //上 case 39: x++; break; //右 case 40: y++; break; //下 default: paint(); return; } //自分or壁に衝突 if(isHit(snake,x,y) || x<0 || x>=W || y<0 || y>=H ) clearInterval(timer); paint(); return; } //頭を先頭に追加 snake.unshift(new Point(x,y)); if(isHit(foods, x, y)) { point +=10; //餌を食べた moveFood(x,y); }else{ snake.pop(); //食べていない→しっぽを解除 } paint(); } function paint() { ctx.clearRect(0,0,W * S, H * S); ctx.fillStyle = "rgb(256,0,0)"; ctx.fillText(point, S, S * 2); ctx.fillStyle = "rgb(0,0,255)"; foods.forEach(function (p) { ctx.fillText("+", p.x * S, (p.y + 1) * S);}); snake.forEach(function (p) { ctx.fillText("*", p.x * S, (p.y + 1) * S); }); } function keydown(event) { keyCode = event.keyCode; } </script> </head> <body onload="init()"> <canvas id="field" width="400" height="400" style="background:#cccccc"> </canvas> </body> </html>

  • DataGridで数値を変更の際の処理について

    WinXP、Flash8Proにてオーサリングしております。 質問です。 下記のスクリプトで、ダイナミックテキストに設定した変数amount_hに変更された数量が追加されて いくようにしたいのですが、 なぜか、String扱いとなってしまって amount=2として、 amount_h+=amount; ←これを2回くりかえすと amount_hの値は22と表示されてしまいます。 なぜこうなってしまうのでしょうか? どうぞ宜しくお願いいたします。 /////////////////////////////////////// function CalcSum() { var sum:Number = 0; var sumamount:Number; _global.sum_value; for (var i = 0; i<my_dg.length; i++) { price_=my_dg.getItemAt(i).price; //priceから"円"を取り除く trace("price_1="+price_); price_=price_.substr(0,price_.length-1); trace("price_2="+price_); sumamount += my_dg.getItemAt(i).amount; sum=price_*my_dg.getItemAt(i).amount; trace("sumamount="+sumamount); trace("price_3="+price_); _global.sum_value+=sum; }//end of for if(newval==0){ if(sumamount==0 || !sumamount){ sum=0; F_CalcSum(sum); }else{ _global.sum_value_taxin=sum_value*1.05+trance_price; _pa.value_h=_global.sum_value; _pa.sum_value_h=_global.sum_value_taxin; trace("sumamount="+sumamount); _pa.amount_h = sumamount; } }else{ _pa.amount_h = sumamount; _pa.trance_h = _global.trance_price; _pa.value_h = _global.sum_value; _global.sum_value_taxin = _global.sum_value*1.05+trance_price; _pa.sum_value_h=sum_value_taxin; } return sum; }

    • ベストアンサー
    • Flash
  • javascriptの打ちミスしてる所を知りたい。

    参考書の通り打ちました。参考書では、蛇を上下左右キーで操作し、餌を食べさせるゲームと書いておりましたが、灰色のイメージが出るだけで、蛇っぽいのは出ません。 たぶんどっかでタイプミスしてると思うのですが、どこだかわかりません。 教えてください。 <!DOCTYPE html> <html> <head> <title>SnakeBite</title> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <script type="text/javascript"> var W,H,S=20; var snake=[],foods=[]; var keyCode=0; var point=0; var timer=NaN; var ctx; function Point(x,y){ this.x=x; this.y=y; } function init(){ var canvas = document.getElementById('field'); W=canvas.width/S; H=canvas.height/S; ctx =canvas.getContext('2d'); ctx.font ="20px sans-serif"; snake.push(new Point(W/2,H/2)); for(var i=0; i<10;i++){ addFood(); } timer=setInterval("tick()",200); window.onkeydown =keydown; } function addFood(){ while(true){ var x =Math.floor(Math.random()*W); var y =Math.floor(Math.random()*H); if(isHit(foods,x,y)|| isHit(snake.x,y)){ continue; } foods.push(new point(x,y)); break; } function isHit(data,x,y){ for(var i=0;i<data.lenght;i++){ if(data[i].x==x && data[i].y==y){ return true; } } return false; } function moveFood(x,y){ foods =foods.filter(function(p){ return(p.x !=x || p.y !=y); }); addFood(); } function tick(){ var x=snake[0].x; var y=snake[0].y; switch(keyCode){ case 37:x--;break; case 38:y--;break; case 39:x++;break; case 40:y++;break; defaule:paint(); return; } if(isHit(snake,x,y) || x<0 ||x>=W || y<0||y>=H) { clearInterval(timer); paint(); return; } snake.unshift(new Point(x,y)); if(isHit(foods,x,y)){ point+=10; moveFood(x,y); }else{ snake.pop(); } paint(); } function paint(){ ctx.clearRect(0,0,W*S,H*S); ctx.fillStyle="rgb(256,0,0)"; ctx.fillText(point,S,S*2); ctx.fillStyle="rgb(0,0,255)"; foods.forEach(function(p){ ctx.fillText("+",p.x*S,(p.y+1)*S); }); snake.forEach(function(p){ ctx.fillText("*",p.x*S,(p.y+1)*S); }); } function keydown(event){ keyCode=event.keyCode; } </script> </head> <body onload="init()"> <canvas id="field" width="400" height="400" style="background:#cccccc"> </canvas> </body> </html>

  • ロールオーバーの処理で「最初の画像→click→ロールオーバーの画像→click→Yahoo!」という処理は出来ますか?

    Java Script初心者です。 画像をonclickでロールオーバさせています。 最初の画像をクリックするとロールオーバのイメージになり、その状態でもう1度クリックするとリンクに飛ばすことは出来ますか? やりたい事は以下のような処理です。 最初の画像→click→ロールオーバーの画像→click→Yahoo! 現在はロールオーバーの画像までは表示できましたが、その画像にリンクを貼ることができません。 色々調べましたら分かりませんでしたので、分かる方がいらっしゃいましたら教えてください。 --------------------------HTML-------------------------- <img src="images/image_01.jpg" id="Image1" alto="EVENT" onclick="MM_swapImage('Image1','','images/image_over_01.jpg',1)" onmouseout="MM_swapImage('Image1','','images/image_01.jpg',1) /> ------------------------Java Script-------------------------- function MM_preloadImages() { //v3.0 var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array(); var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++) if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}} } function MM_swapImgRestore() { //v3.0 var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc; } function MM_findObj(n, d) { //v4.01 var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) { d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);} if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n]; for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document); if(!x && d.getElementById) x=d.getElementById(n); return x; } function MM_swapImage() { //v3.0 var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3) if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];} }

  • JavaScriptの文字のエンコードについて

    フォームの入力欄で、「'」(シングルクォート)を入力してサブミットすると、ブラウザ(Firefox3.5)で見ると「'」と表示されていますが、ブラウザのソースを見るとvalueの¥ところには、「'」と表示されています。 これは、PHPでエンコードされているせいなのですが、 PHPでエンコードされた「'」を、JavaScriptを使って、ブラウザからソースを見たときに「'」と表示できるでしょうか? ソースは、こんな感じで書いたのですが、動作しませんでした........。 function chChar(){ var keyValue = document.getElementById("delete_key").value; var ascii = new Array(' ', '!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F','G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~'); var htmlChar = new Array(' ', '!', '"', '#', '$', '%', '&', ''', '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~'); var re = new RegExp(htmlChar); if(keyValue.match(re)){ for(i=0; i<ascii.length; i++){ keyValue = keyValue.replace(htmlChar[i], ascii[i]); } } return keyValue; }

  • JavaScriptの配列について

    var old_array = Array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '<', '#', '/', '>', '%', '.', '*', '0', '!', '?', ':', '=', '|'); var new_array = Array('b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '<', '#', '/', '>', '%', '.', '*', '0', '!', '?', ':', '=', '|'); のような配列があり、 abcと入力するとbcd DEFと入力するとEFG 012と入力すると!23 というようなものを作りたいのですがどうすればいいでしょうか。

  • 文字列型定数?

    この度、カウンタを埋め込みましたが どうしても、上記タイトルのスクリプトエラー が発生します。 <head> <script language="JavaScript"> <!-- function MM_preloadImages() { //v3.0 var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array(); var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++) if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}} } function MM_swapImgRestore() { //v3.0 var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc; } function MM_findObj(n, d) { //v3.0 var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) { d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);} if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n]; for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document); return x; } function MM_swapImage() { //v3.0 var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3) if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];} } //--> </script> </head> 文字オーバーの為次へ(文字列型定数2)

専門家に質問してみよう