• 締切済み

javascriptでtoFixedを切り捨てに

javascriptの知識が乏しく苦戦しております。 レートを含む計算式をサイトに載せる時に、変動する数字を書きなおして、電卓で計算するのが手間で、 変動した数値を代入するだけで計算結果が表示されるようにしたいと思います。 javascriptを使えばできるかと思い、書いてみて、四捨五入での形式ではなんとか形になったのですが、後から四捨五入ではなく小数点以下切り捨てで表示させたいと思いました。 切り捨ての際の書き方がわからず、上手くいかないのでご助言いただけますと幸いです。 ■下記が現状です <SCRIPT LANGUAGE="JavaScript"> <!-- var a; var b; var c; var d; var e; var f; var yakujyo; var risoku; var uketori; a = 20000; b = 1.0275; c = 90.10; d = 0.1025; e = 129; f = 360; yakujyo = (a * b * c).toFixed(0); risoku = ((a * d ) * (e / f) * c).toFixed(0); uketori = ((a * b * c) + ((a * d ) * (e / f) * c)).toFixed(0);   bb = (b * 100).toFixed(2); dd = (d * 100).toFixed(2); //計算式 document.write ("<h3>計算式(為替:1オーストラリアドル=",c,"円と仮定)</h3>"); document.write ("◆2万オーストラリアドルを購入、債券単価",bb,"%の場合<br />"); document.write ("<b>約定代金</b>&nbsp; ",a,"AUD×",bb,"%×",c,"円=",yakujyo.replace(/(\d)(?=(\d{3})+$)/g, "$1,"),"円<br />"); document.write ("<b>利息</b>&nbsp; ",a,"AUD×",dd,"%×(",e,"/",f,")※×",c,"円=",risoku.replace(/(\d)(?=(\d{3})+$)/g, "$1,"),"円<br />"); document.write ("<b>受取金額</b>&nbsp",yakujyo.replace(/(\d)(?=(\d{3})+$)/g, "$1,"),"円+",risoku.replace(/(\d)(?=(\d{3})+$)/g, "$1,"),"円=",uketori.replace(/(\d)(?=(\d{3})+$)/g, "$1,"),"円<br /><br />"); // --> </SCRIPT>

みんなの回答

  • chie65535
  • ベストアンサー率43% (8523/19372)
回答No.2

以下のように使い分けて下さい。 ・近似値を求める。 小数点以下を指定した桁数にした「近似値」を求めます(四捨五入ではなく「近似値」なので注意) 数値式.toFixed(桁数) ・四捨五入する。 小数点以下を指定した桁数にして四捨五入します Math.round(数値式*Math.pow(10,桁数))/Math.pow(10,桁数) ・切り捨てする。 小数点以下を指定した桁数にして切り捨てします Math.floor(数値式*Math.pow(10,桁数))/Math.pow(10,桁数) ・切り上げする。 小数点以下を指定した桁数にして切り上げします Math.ceil(数値式*Math.pow(10,桁数))/Math.pow(10,桁数) -- round、floor、ceilは、桁数を指定出来ませんが「10倍してroundしてから10で割る」などの方法で、任意の桁数で四捨五入、切り捨て、切上が出来ます。 切り捨てする桁数が固定なのであれば Math.round(Num1*1000)/1000 で良く、Math.pow()は要りません。 Math.pow()を使ったのは、.toFixed()のように「桁数を指定したいから」です。 なお「近似値」と「四捨五入」は「正の数」を扱う分には同一視できますが、「負の数」になると挙動が異なってくるので注意しましょう。

回答No.1

検索位しましょう。 https://www.google.co.jp/search?q=javascript+%E5%88%87%E3%82%8A%E6%8D%A8%E3%81%A6 toFixedはもともそ「四捨五入した値の文字列」にするメソッドです。 別にそのタイミングで文字列にする必然性はないのだから、単にMath.floorでいいでしょう。http://www.pori2.net/js/number/3.html ついでに言っておくと、 ・タグは小文字で書きましょう。 ・language属性は古い。typeにしましょう。 ・最初と最後のHTMLコメントは古い。要りません。 ・即座に代入するなら変数の宣言と分ける意味はありません(var a = 2000;)。 ・広告でもあるまいし、document.writeで要素を挿入するのは良くない。DOMを利用して挿入しましょう。

関連するQ&A

  • Javascriptで、以下の様な足し算をする場合、

    Javascriptで、以下の様な足し算をする場合、 aからdのいずれかが空白の時には計算結果が表示されません。 いずれかが空欄の場合はその値をゼロとみなして計算結果を 表示したいのですが、記述方をご教授頂けないでしょうか。 用いる演算は、足し算と引き算のみを想定しています。 基本的な内容かとは思いますが、宜しくお願いします。 <script> var a = 1; var b = 3; var c = 5; var d = 7; document.write(a+b+c+d); </script>

  • javascriptについて

    入力した各データをサブウィンドウであらわすため、javascript内で function outdata() { f0bj = document.myform; ftxt = f0bj.yourname.value;     ----(a) fxxt = f0bj.phonenumber.value; ----(a) for(i=1; i<5;i++) if(f0bj.elements[i].checked) fBtn = f0bj.elements[i].value; fsel = f0bj.place.options[f0bj.place.selectedIndex].value; subWin = window.open("abc.html","kekka","width=5000,height=300"); subWin.document.open(); subWin.document.write("a:"+ftxt+"<br>"); subWin.document.write("b:"+fxxt+"<br>"); subWin.document.write("c:"+fBtn+"<br>"); if(fBtn == "c"){ subWin.document.write("d:"+fsel+"<br>"); } subWin.document.close(); } として、html内でそれらの記入をしているのですが、この時に今テキストフォームが2つ(a) あるのですがこの時テキストフォームが2つあると残りのラジオボックスとセレクトメニューが うまく表示してくれないのですが何がいけないのでしょうか? ちなみにラジオボックスには項目は4つ、セレクトメニューは5つあり、テキストフォームを1つ にしたらうまく実行できることは確認済みです。

  • javascriptの九九の表の書き換えについて

    var a; for (a=1; a<10; a++) if (a<=1){ document.write("   "+a); }else{ document.write(" "+a);} document.write("<br>"); document.write("---------------------------------"); document.write("<br>"); var i, j; for (i=1; i<10; i++) { document.write(i+"|"+" "); for (j=1; j<10; j++) { var k = i*j; if ( k > 81 ) { break; } if (k>=10){ document.write(" "+k+" "); }else { document.write(" "+k);} } document.write("<br />"); } forを使った九九の表はできたのですが これをwhileを使ったコードに書き換えるにはどうしたらいいでしょうか?

  • JavascriptからJavaへの変え方

    Javascriptで作ったものをJavaにしないといけなくなったのですが 私はJava初心者でまったくわかりません。 色々ネットで調べてみたのですが、どうも難しくて理解することができませんでした。 下にJavascriptで作ったものを載せてるのですがどなたかやり方を教えてもらえないでしょうか? <html> <head> <title>サンプル</title> <script type="text/javascript"> function jikoku() { dd = new Date(); document.F1.T1.value = dd.toLocaleString(); window.setTimeout("jikoku()", 1000); } </script> <script type="text/javascript"> mes = new Array(5); mes[0]="0"; mes[1]="1"; mes[2]="2"; mes[3]="3"; mes[4]="4"; date=(new Date()).getHours(); if( 0 <= date && date <= 5 ){ document.write(mes[0]); } else if( 6 <= date && date <= 10 ){ document.write(mes[1]); } else if( 11 <= date && date <= 16 ){ document.write(mes[2]); } else if( 17 <= date && date <= 19 ){ document.write(mes[3]); } else{ document.write(mes[4]); } </script> <script type="text/javascript"> function Random() { var kazu = Math.random(); kazu = kazu*100; kazu = Math.ceil(kazu); if( kazu<=9 ) document.write('<br/>○1<br/>'); else if( kazu<=19 ) document.write('<br/>○2<br/>'); else if( kazu<=29 ) document.write('<br/>○3<br/>'); else if( kazu<=39 ) document.write('<br/>○4<br/>'); else if( kazu<=49 ) document.write('<br/>○5<br/>'); else if( kazu<=59 ) document.write('<br/>○6<br/>'); else if( kazu<=69 ) document.write('<br/>○7<br/>'); else if( kazu<=79 ) document.write('<br/>○8<br/>'); else if( kazu<=89 ) document.write('<br/>○9<br/>'); else document.write('<br/>○10<br/>'); } Random() </script> <script language="JavaScript"> var imglist = new Array( "sample1.jpg", "sample2.jpg", "sample3.jpg", "sample4.jpg" ); var selectnum = Math.floor((Math.random() * 100)) % imglist.length; var output = "<img src=" + imglist[selectnum] + ">"; document.write(output); </script> </head> </html>

  • 入力する条件によって文字色・背景色を変えたい

    JavaScriptで、入力する数字の条件によって文字色や背景色を変えたいのですが、どのように記述すれば良いでしょうか。 例えば、条件(1)のボックスに入力する数字が100以上の時に、文字色を「白」、背景白を「赤」にしたいのです。 よろしくお願い致します。 <HTML xmlns="http://www.w3.org/1999/xhtml" lang="ja"> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <TITLE>計算テスト</TITLE> </HEAD> <BODY bgcolor="#FFFFCC"> <FONT SIZE="3"> <SCRIPT language="JavaScript"> <!-- function keisan1(x1,x2){ a=0.2*(eval(x1)/10)*(eval(x1)/10)*Math.sqrt(eval(x2))*1000; return a.toFixed(0);} function keisan2(x1,x2,x3,x4,s1){ b=eval(x2)+Math.pow((0.2*(eval(x1)/10)*(eval(x1)/10)*Math.sqrt(eval(x2))),2)*eval(document.getElementById('s1').value)*eval(x3)+0.1*eval(x4); return b.toFixed(2);} function keisan3(x1,x2){ c=20*(eval(x1)/10)*(eval(x1)/10)*(eval(x2)); return c.toFixed(0);} function calc(){ // ← 計算ボタンが押されたらこの関数が呼ばれる   var d1 = document.fk.d1;   var d2 = document.fk.d2;   var d3 = document.fk.d3;   var d4 = document.fk.d4;   var s1 = document.fk.s1;   var ans1 = keisan1(d1.value, d2.value);   var calc1 = document.fk.calc1;   calc1.value = ans1;   var ans2 = keisan2(d1.value, d2.value, d3.value, d4.value, s1.value);   var calc2 = document.fk.calc2;   calc2 .value = ans2 ;   if(ans2 >= 0) calc2.style.color = "#e60000";   if(ans2 >= 0) calc2.style.backgroundColor = "#ffffff";   if(ans2 >= 1.4) calc2.style.color = "#ffffff";   if(ans2 >= 1.4) calc2.style.backgroundColor = "#e60000";   var ans3 = keisan3(d1.value, d2.value);   var calc3 = document.fk.calc3;   calc3.value = ans3;   if(ans3 <180) calc3.style.backgroundColor = "#D5FFCB";   if(ans3 >=180) calc3.style.backgroundColor = "#FFCC99";   if(ans3 >=270) calc3.style.backgroundColor = "#FF9999"; } //--> </SCRIPT> <FONT SIZE="5"><B>計算</B></font><BR> <FORM name="fk"> <FONT SIZE="3">   ●条件(1):<INPUT size="7" type="text" name="d1" style="text-align:right"><BR>   ●条件(2):<INPUT size="7" type="text" name="d2" style="text-align:right"><BR>   ●条件(3):<SELECT name="s1" id="s1" onchange="b();"> <OPTION value="0.1">A</OPTION> <OPTION value="0.2">B</OPTION> </SELECT> <BR>   ●条件(4):<INPUT size="7" type="text" name="d3" style="text-align:right"><BR>   ●条件(5):<INPUT size="7" type="text" name="d4" style="text-align:right"><BR> <BR>   <INPUT type="button" value="計算開始" onclick="calc()"> <BR> <BR>   ◆回答(1):<INPUT size="7" type="text" name="calc1" style="border-color:#000000; border-width:1px; border-style:solid; text-align:right"><BR>   ◆回答(2):<INPUT size="7" type="text" name="calc2" style="border-color:#000000; border-width:1px; border-style:solid; text-align:right"><BR>   ◆回答(3):<INPUT size="7" type="text" name="calc3" style="border-color:#000000; border-width:1px; border-style:solid; text-align:right"><BR> <BR> </FONT> </FORM> </BODY> </HTML>

  • XML を JavaScript で表示したい

    初心者です。XML の属性を JS で表示したいのですが、属性の表示をJSで記入すると属性部分(?)が「null」と表示されるだけで元の XML の内容が正しく反映されません。以下、html のコメントした部分が自分の足したコードですが、何が間違っているのかご教示いただけると有り難いです。宜しくお願いします。 ---XML-[orders.xml]------------------ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE orders SYSTEM "orders.dtd"> <orders> <order> <customerid limit="1000">1111111</customerid> <status>発送済み</status> <item instock="Y" itemid="SA15"> <name>商品名ABC</name> <price>825.00</price> <qty>1</qty> </item> </order> </orders> ---/XML------------------- ---DTD--[orders.dtd]----------------- <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE orders SYSTEM "orders.dtd"> <orders> <order> <customerid limit="1000">1111111</customerid> <status>発送済み</status> <item instock="Y" itemid="SA15"> <name>商品名ABC</name> <price>825.00</price> <qty>1</qty> </item> </order> </orders> ---/DTD------------------- ---html--[hoge.html]----------------- <?xml version = "1.0"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "​http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">​ <html xmlns = "​http://www.w3.org/1999/xhtml">​ <head> <title>A Parser Test</title> <script type="text/javascript"> var tab="&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" function printElement(indent, node) { var i; if (node.nodeType == 3) {document.write("<br />" +indent + node.nodeValue); document.write("<br />" +indent + "attributes: "+ node.attributes);} <!--この1行を足しました。誤動作しています(TT)--> else { document.write("<br />" +indent + "[" + node.Name + "]"); for (i = 0; i < node.childNodes.length; i++) { printElement(indent+tab, node.childNodes[i]); } document.write("<br />" +indent + "[/" + node.nodeName + "]"); } } var xmlDoc = new ActiveXObject("Microsoft.XMLDOM") xmlDoc.async="false" xmlDoc.load("orders.xml") if (xmlDoc.parseError.errorCode != 0) { document.write("<br />Error Code: "); document.write(xmlDoc.parseError.errorCode); document.write("<br />Error Reason: "); document.write(xmlDoc.parseError.reason); document.write("<br />Error Line: "); document.write(xmlDoc.parseError.line); document.write("<br />"); } else { document.write("<strong>ファイルはパーサーを通りました</strong><br />"); document.write("<p /><h1>ツリー構造の表示</h1><p />") printElement("", xmlDoc.documentElement); } </script> </head> <body> </body> </html> ---/html-------------------

  • javascript 二つの配列を比較し等しいもの

    すべてをdocument.writeする (x番目とi番目が等しいです。) タイトルが長くなってしまいました。 ひとまず、こんな形で実現できたのですが、もっとスマートな形でできないでしょうか・・? a=[2,9,8,4,3,5,7]//a配列 b=[9,2,4,5,7,3,8]//b配列 for(i=0;i<a.length;i++){ if(a[0]==b[i]){ document.write("a[0]と"+i+"が等しい<br/>"); } if(a[1]==b[i]){ document.write("a[1]と"+i+"が等しい<br/>"); } if(a[2]==b[i]){ document.write("a[2]と"+i+"が等しい<br/>"); } if(a[3]==b[i]){ document.write("a[3]と"+i+"が等しい<br/>"); } if(a[4]==b[i]){ document.write("a[4]と"+i+"が等しい<br/>"); } ~~~以下同じ略 } ※a配列b配列は同じ値をもっていますが毎回シャッフルされます。

  • javascript で undefinedと表示されます

    全ての変数、配列に alert(typeof variable); を試しましたが undefinedが見つかりません。 function a{ var lastdayArray = new Array ('','31','28','31','30','31','30','31','31','30','31','30','31'); var weekArray = new Array ('日','月','火','水','木','金','土'); var a = new Date(); var b = new Date(); var mymonth = a.getMonth()+1; var nextmonth =mymonth +1 ; var myyear = a.getYear()+1;   var today = a.getDate(); var maxbox = 36; var sday = a.setDate(1); var nday = b.setDate(1); var nmonth = b.setMonth(mymonth); var nwday = b.getDay(); var fwk = a.getDay(); var nfday = 6 - nwday; var fline = 6 - fwk; var nextlsday = lastdayArray[mymonth]; var lsbox = (fwk + lastdayArray[mymonth]) +1; var monthArray = new Array(mymonth,nextmonth); var monthflg = new Array(fwk,nfday); var nextflg = new Array(fline,nwday); var s_no0 = 1;   var s_no1 = 1; //数値代入変数       var s_no2 = 1; var s_no3 = 0; var s_no4 = 0; var s_no5 = 0; var s_no6 = 0; var s_no7 = 0; var s_no8 = 0; var schedule_no = new Array(s_no0,s_no1,s_no2,s_no3,s_no4,s_no5,s_no6,s_no7,s_no8); var s_str0 = 'a'; var s_str1 = 'a'; //文字列代入変数 var s_str2 = 'a'; var s_str3 = 'a'; var s_str4 = 'a'; var s_str5 = 'aa'; var s_str6 = 'a'; var s_str7 = 'a'; var s_str8 = 'a'; var schedule_str = new Array(s_str0,s_str1,s_str2,s_str3,s_str4,s_str5,s_str6,s_str7,s_str8); for(var x = 0; x < 2; x++){ daycount = 0; document.write(monthArray[x] + '月の予定'); if(nmonth == 12){nmonth = 0;} document.write('<table width="73%" height="337" border="1" cellpadding="1" cellspacing="1">'); //曜日出力 document.write('<tr>'); for(var l = 0 ; l <= 6; l ++){ if(l == 0){ weekArray[l] = (weekArray[l].fontcolor('#ff1493').fontsize(4)); } else if(l == 6){ weekArray[l] = (weekArray[l].fontcolor('#87ceeb').fontsize(4)); } document.write('<td>' + weekArray[l] +'</td>');} document.write('</tr>'); //曜日を判定しテーブル出力 document.write('<tr>'); //空ボックス出力 if((monthflg[x]) != 6 ){ for(var k = 0; k < (monthflg[x]); k++){ document.write('<td>' + '&nbsp;' +'</td>'); } } if((monthflg[x]) == 0){ for(var y = 0; y < 6 ; y++){ document.write('<td>' + '&nbsp;' +'</td>'); } if((schedule_no[y]) === daycount){ daycount ++; document.write('<td>' + daycount + schedule_str[y] +'</td>'); } else { daycount ++; document.write('<td>' + daycount +'</td>'); } } else{ //空ボックスの数~土曜日まで出力 for(var m =0 ; m <= nextflg[x]; m++){ if((schedule_no[m]) === daycount){ daycount ++; document.write('<td>' + daycount + schedule_str[m] +'</td>'); } else { daycount ++; document.write('<td>' + daycount +'</td>'); } } } document.write('</tr>'); //行出力 for(var i =0 ; i < 4; i++){ document.write('<tr>'); //列出力 for(var j =0 ; j < 7; j++){ if(daycount < lastdayArray[monthArray[x]]){ daycount ++; document.write('<td>' + daycount +'</td>'); } else{ document.write('<td>' + '&nbsp;' +'</td>'); } } document.write('</tr>'); } //最終行出力 if(daycount < lastdayArray[monthArray[x]]){ document.write('<tr>'); for(var p =0 ; p < 7 ; p++){ if(daycount < lastdayArray[monthArray[x]]){ if((schedule_no[p]) === daycount){ daycount ++; document.write('<td>' + daycount + schedule_str[p] +'</td>'); } else { daycount ++; document.write('<td>' + daycount +'</td>'); } } else{ document.write('<td>' + '&nbsp;' +'</td>'); } } document.write('</tr>'); } document.write('</table>'); } }

  • お願いしますjavascriptです

    javascript 初心者なのですが、どうしてもわからないため、 ご教授お願いたします。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>おみくじ</title> </head> <body> <script type="text/javascript"> <!-- //0~4の乱数を作る //0:大吉, 1:中吉, 2:小吉 ,3:吉, 4:凶 var rnd = Math.floor(Math.random() * 5) //おみくじの判定 switch (rnd){ case 0: var fortune = "大吉"; break; case 1: var fortune = "中吉"; break; case 2: var fortune = "小吉"; break; case 3: var fortune = "吉"; break; default: var fortune = "凶"; break; } //おみくじの表示 document.write("今日の運勢: " + fortune + "<br />"); //金運の表示 document.write("金運: "); var money = Math.floor(Math.random() * 5) + 1; for (var i = 0; i < money; i++) { document.write("(ダイヤ)"); } document.write("<br>"); //恋愛運の表示 document.write("恋愛運: "); var love = Math.floor(Math.random() * 5) + 1; for (var i = 0; i < love; i++) { document.write("&hearts;"); } document.write("<br>"); //健康運の表示 document.write("健康運: "); var health = Math.floor(Math.random() * 5) + 1; var i = 0; while (i < health){ document.write("(クラブ)"); i++; } document.write("<br>"); //--> </script> </body> </html> このソースに、分岐だと考えますが、 大吉が出た時は、金運、恋愛運、などのマークが3つ以上に設定、逆に 今日ならば各マークが3つ以下に設定するには Javascriptでどういう風に記述すればよいでしょうか。

  • どうしても上手くいきません。

    <!-- function func() { var a = eval(document.price.fa.checked); var b = eval(document.price.fb.checked); var c = eval(document.price.fc.checked); var d = eval(document.price.fd.checked); var e = eval(document.price.fe.checked); var f = eval(document.price.ff.checked); var g = eval(document.price.fg.checked); var h = eval(document.price.fh.checked); var i = eval(document.price.fi.value); document.price.fprice.value = a + f +Math.round((b + c + d + e + 6500) * (50 + g)); } // --> すみません。 上の構文がどうしても上手くいきません。 計算結果が反映されません。 どこかおかしいのでしょうか。 不しつけながら宜しくお願いします。

専門家に質問してみよう