• ベストアンサー

evalの計算結果について

OSはWindows、ブラウザはIE4.0です。 以下のJavaScriptを実行すると、答えとして0.1を期待しているのですが、 s=0.09999999999999964 となります。どうしたら期待通りの答えがでるのでしょうか。 よろしく御回答お願いいたします。 <script language="JavaScript"><!-- スクリプト開始 s=eval("10.18-10.08"); document.write("s="+s); // スクリプト終了。 --></script>

  • rero2
  • お礼率100% (25/25)

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

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.2

原因は ykc さんが書かれた通り。 計算上の誤差はあまり気にせずに、体裁を整えたいだけであれば、 参照URLに示したところに、javascript で使える printf() の コードがあるので、それを使うと良いかも。

参考URL:
http://www.goice.co.jp/member/mo/amuse/javascript/expert/
rero2
質問者

お礼

ありがとうございました。 僕のせいじゃないんですね。それが解って安心。 でも、evalよ、JavaScriptよ、それでいいのかっと思いまーす。 アキラメがつきました。printfあたってみますぅ。

その他の回答 (1)

  • ykc
  • ベストアンサー率29% (28/95)
回答No.1

小数点計算は2進数<->10進数の変換のとき、丸め込みの誤差がでます。 小数点無しで計算し、最後に割って表示させるのがわりと一般的だとおもいます。 ex) s=eval(1018-1008); document.write("s=" + (s/100));

rero2
質問者

お礼

ありがとうございました。 僕のせいじゃないんですね。それが解って安心。 でも、evalよ、JavaScriptよ、それでいいのかっと思いまーす。 アキラメがつきました。printfあたってみますぅ。

関連するQ&A

  • 書き方が悪いのか?それとも仕様なのか?

    それとも、単純なミスに気がつかないのか、どうしても、期待した結果を表示させることができません。 document.write();内で「<!-- comment -->」や「<script ... </script>」はNGなのでしょうか? 現状としては、後述の内容をHTMLファイルとしてローカルに保存した後、ブラウザで、そのHTMLファイルを開いて結果を確認しています。 ブラウザは Firefox 2.0.0.19 で OS には Debian GNU/Linux etch を使用しています。 可能であるならば、表示できるようにしたいのですが、もし、無理であるなら、その原因(理由?)も知りたいです。 申し訳ありませんが、詳しいかた、どうぞ、よろしくおねがいいたします。 【期待している結果】 - Test Start - ------------------------------------------- ←<HR>の線 Script:document.write('<script language='Javascript'>document.write('Hello World'):</script>:End. 【実際の結果】 - Test Start - ------------------------------------------- ←<HR>の線 :End."); --> ---- ここからHTMLファイル内の内容 ---- <HTML> <HEAD> <TITLE>ScriptTest</TITLE> <script language="Javascript"> <!-- document.write("- Test Start -"); --> </script> </HEAD> <HR> <BODY> <script language="Javascript"> <!-- document.write("<!-- comment -->"); document.write("Script:document.write('<script language='Javascript'>document.write('Hello World'):</script>:End."); --> </script> </body> </HTML> ---- ここまでHTMLファイル内の内容 ----

  • 複数のJavaScriptを順番に実行させるには

    1ページ内に複数のJsvaScriptを作成し順番に前のJavaScriptが終了したら次が実行を開始する方法を教えてください。お願いします。 例 <BODY> <DIV style="width : 212px;height : 12px;top : 16px;left : 8px; position : absolute; z-index : 1; " id="Layer1"> <SCRIPT language="JavaScript"> <!-- document.write('<EMBED src="st0.wma">最初に実行'); //--> </SCRIPT> <SCRIPT language="JavaScript"> <!-- document.write('<EMBED src="st1.wma">2番目に実行'); //--> </SCRIPT></DIV> </BODY>

  • Javaで計算結果によって文字色を変えたい

    下記のような計算プログラムを検討しています。 全くの素人なので、ネットで参考になるものを探して、やっとここまで出来ました。 計算結果の値によって文字色を変えたいのですが上手くいきません。 例えば、数値が100以上であれば青、200以上であれば、赤・・・というように設定したいのですが、どのように記述すれば良いでしょうか。 よろしくお願い致します。 <HTML> <HEAD> <TITLE>計算</TITLE> </HEAD> <BODY> <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.01*eval(x4); return b.toFixed(2);} function keisan3(x1,x2){ c=200*Math.pow((eval(x1)/10),2)*(eval(x2)); return c.toFixed(0);} //--> </SCRIPT> <H3>TEST</H3> <FORM name="fk">※ 条件を入力して下さい <BR> <BR> 条件(1)<SELECT name="s1" id="s1" onchange="b();"> <OPTION value="0.2">A</OPTION> <OPTION value="0.9">B</OPTION> </SELECT> <BR> 条件(2)<INPUT size="10" type="text" name="d1" style="text-align:right"><BR> 条件(3)<INPUT size="10" type="text" name="d2" style="text-align:right"><BR> 条件(4)<INPUT size="10" type="text" name="d3" style="text-align:right"><BR> 条件(5)<INPUT size="10" type="text" name="d4" style="text-align:right"><BR> <BR> <INPUT type="button" value="計算開始" onclick="document.fk.calc1.value=keisan1(document.fk.d1.value,document.fk.d2.value);document.fk.calc2.value=keisan2(document.fk.d1.value,document.fk.d2.value,document.fk.d3.value,document.fk.d4.value,document.fk.s1.value);document.fk.calc3.value=keisan3(document.fk.d1.value,document.fk.d2.value);"> <BR> 回答(1)<INPUT size="10" type="text" name="calc1" style="text-align:right"> <BR> 回答(2)<INPUT size="10" type="text" name="calc2" style="text-align:right"> <BR> 回答(3)<INPUT size="10" type="text" name="calc3" style="text-align:right"> </FORM> </BODY> </HTML>

  • eval()の危険性の具体例を教えてくれませんか?

    javascriptのeval()の危険性についての質問です。 下のようなページを公開したとして <html> <script> function execstr(str){eval("(" + str + ")");} </script> <body> <form action="#"> <input type="text" id="code"> <input type="button" onclick="javascript:execstr(this.form.code.value);" /> </form> </body> </html> 「ユーザーが入力したテキストをそのままeval()で評価実行するのは、悪意のあるコードがそのまま実行されてしまうので危険である」とされています。この危険な悪意のあるコードが、どんな危険性をもつのかが具体的にイメージが掴めないのです。 javascriptはクライアント側のブラウザーで実行されているものであり、そもそもローカルなリソースにはアクセス出来ないし、ましてサーバー側に影響を及ぼすようなjavascriptとはどんなものなのでしょうか? クッキーを盗むといっても、本人のクッキーを盗んでも仕方ないし、他人のクッキーはみれないでしょう。XMLHttpRequestで他のサイトにポストするコードを実行されても、サーバー側で困る事はないと思うのですが。

  • カウンタ表示がされません・・・

    JavaScriptの勉強をしています。下記をコード作成してWebサーバにアップしたのですが初回の「はじめまして・・・」は表示されるのですが2回目表示のカウント表示されません。 どうしてでしょうか?IE6.0の設定でしょうか? <html><head><title>JavaScript</title> <script language="JavaScript"> expstr = "; expires=Sun, 7 June 2015 14:00:00 UTC"; cookiestr = document.cookie; if(cookiestr.length > 0){ visitcount = cookiestr.substring(11,cookiestr.length); newcount = eval(visitcount) +1; document.cookie = "VisitCount="+newcount.toString(10)+expstr; }else{ document.cookie = "VisitCount=1"+expstr; newcount = 1; } </script></head> <body> <script language="JavaScript"> if( newcount > 1 ){ document.wirte("あなたは<B>"+newcount+"回目</B>の来訪です。"); }else{ document.write("はじまして。ご来訪有難うございます。"); } </script></body></html>

  • document.writeで画面が消える

    javaScriptはじめたばかりのものです。以下の記述でEMBEDを実行させると、音は出るのですが、画面が消えてしまう(表示がない画面になる)のです。ブラウザの「戻る」で元の画面に戻れます。ブラウザはIE5.5をつかっています。 この現象の理由、解決方法について教えて下さい。 <SCRIPT language="javascript"> <!-- var code; function snd1000(){ code="1000.wav"; document.write('<embed src='+'"'+code+'"'+' hidden="true" loop="false"><br>');} //--> </SCRIPT> <INPUT type="button" value="C" onclick=snd1000()>

  • JavaScript document.write 「更新」すると動作しない

    JavaScriptを組み込んだサイトを作成しました。 自宅には2台PCがあり、パソコンAのブラウザーはFirefox3.5.3とIE7。 パソコンBのブラウザーはFirefox3.0.13とIE6.02900.5512 xpsp sp3です。 パソコンBのブラウザーで動かすとJavaScriptが正常に動きます。 更新ボタンを押しても正常です。 一方、パソコンAでは、一番最初にPCを起動してブラウザを立ち上げた時は正常に動作しますが、「更新」をすると、下記プログラムの <SCRIPT LANGUAGE=JavaScript1.2>document.write(ABC);</script> のdocument.write(ABC)を読み込んでくれなくなります。 ※下記の例で説明すると「あいうえお」という表示が出なくなります。 なお、document.write(ABC)のABCは、<SCRIPT SRC="http://XXXXXX.XXXX/XXXXX/XXXX.js"></SCRIPT>に格納してあります。(下記参照) 何が原因かご教示いただけますでしょうか? m(_ _)m よろしくお願い致します。 ------------------------------------------------ ◆本文 <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <TITLE></TITLE> <SCRIPT src="http://XXXXXX.XXXX/XXXXX/XXXX.js"></SCRIPT> </HEAD> <BODY><SCRIPT language="javascript">document.write(ABC);</SCRIPT></BODY> </HTML> ------------------------------------------------ ◆http://XXXXXX.XXXX/XXXXX/XXXX.js の中身 var ABC=' <b>あいうえお</b>';

  • 小数の足し算

    Javascriptで <SCRIPT language="JavaScript"><!-- function wa() { a = eval( document.myFORM.a.value ); b = eval( document.myFORM.b.value ); s = a + b; document.myFORM.kotae.value="答え " + s; } //--></SCRIPT> </HEAD> <BODY> <FORM name="myFORM"> A =<INPUT type="text" name="a" size="3">B =<INPUT type="text" name="b" size="3"><BR> <INPUT type="text" name="kotae"><INPUT type="button" value="=" onclick="wa()"> </FORM> </BODY> としたとき A=0.1 B=0.05とすると 答え 0.15000000000000002となるのはなぜですか?

  • javascriptコードについて

    下記(1)(2)コードを実行すると、(1)は正常に表示されましたが、(2)の書き方では表示されませんでした。 ----------------------------------------------------------------------------- (1) <script type="text/javascript"> <!-- document.write("Hello"); //--> </script> ----------------------------------------------------------------------------- (2) <script type="text/javascript"> <!--document.write("Hello");//--> </script> ----------------------------------------------------------------------------- そこで質問ですが、'<!--'と'//-->'は改行しないと、 プログラムが正常に動作しないなどのルールはありますでしょうか。 ネット検索もしておりますが、それらしい情報を確認できません。 もし本件について、ご存知の方がいらっしゃいましたらご教授お願いします。 当方、プログラム初心者です。 できるだけ情報を集めたいので、本件について参考になるURLなどがあれば、 併せて回答お願いします。 また、本コードを実行した環境は以下の通りです。 OS:Windows7 pro ブラウザ:IE9、11、chrome、FireFox ※javascript使用に必要な設定は全て有効。

  • ブラウザで表示を変更

    <SCRIPT TYPE="text/javascript"> <!-- if (navigator.userAgent.indexOf("MSIE")!="-1"){//for IE document.write("インターネットエクスプローラー"); } else { document.write("別ブラウザ"); } //--> </SCRIPT> 上記JavaScriptと同じように、インターネットエクスプローラーとそれ以外のブラウザで表示させるメッセージを変えたいのですが、どのように書けばいいのでしょうか。

    • ベストアンサー
    • Perl

専門家に質問してみよう