JavaScriptで、ある計算を行うと結果が -6.716610282340639e-8 となります。

これを "0.00000006716610282340639" と表示したいのですが、どうしたらいいでしょうか?
普通に表示すると "-6.716610282340639e-8" になってしまいます。
toString() しても同様です。

回答の条件
  • 1人2回まで
  • 登録:2009/02/21 18:43:27
  • 終了:2009/02/21 23:43:40

ベストアンサー

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332009/02/21 20:09:19

ポイント50pt

toFixedを使います。

var n = -6.716610282340639e-8;
document.write(n.toFixed(20));

ただし、標準仕様では有効桁数 20 までしかサポートしていないため、それ以降が丸められてしまいます。

その他の回答(2件)

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332009/02/21 20:09:19ここでベストアンサー

ポイント50pt

toFixedを使います。

var n = -6.716610282340639e-8;
document.write(n.toFixed(20));

ただし、標準仕様では有効桁数 20 までしかサポートしていないため、それ以降が丸められてしまいます。

id:GoldenDawn No.2

GoldenDawn回答回数426ベストアンサー獲得回数812009/02/21 21:05:31

ポイント30pt

Number.toFixed() と言うメソッドがあるんですが、有効桁数を超えてしまうので自作 (toFixed2)。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
    <script type="text/javascript">
      <!--
        Number.prototype.toFixedAuto = function() {
          this.toString().match(/(\d+)e[-+](\d+)/) ;
          try { var ret = this.toFixed(RegExp.$1.length + Number(RegExp.$2)) ; }
          catch (e) { var ret = e.message ; }
          return ret ;
        }

        Number.prototype.toFixed2 = function() {
          return (this.toString().match(/e/) ? 
            this.toString().replace(/(-?)([\d.]+)e([-+]?\d+)/,
              function() {
                var n = arguments[2].replace(/\./, '') ;
                with (Math)
                  var z = (new Array(abs(arguments[3]) - (arguments[3] > 0 ? floor(log(n)/LN10) - 1 : 0))).join('0') ;
                return arguments[1] + (arguments[3] < 0 ? '0.' + z : n) + (arguments[3] > 0 ? z : n) ;
              }
            )
          : this.toString()) ;
        } ;


        onload = function() {
          var n = -6.716610282340639e-8 ;
          //var n = -6.716610282340639e21 ;
          document.body.innerHTML = n + '<br>' ;
          document.body.innerHTML += n.toFixedAuto() + '<br>' ;
          document.body.innerHTML += n.toFixed2() + '<br>' ;
        }
      //-->
    </script>
  </head>

  <body>
  </body>
</html>
id:Mook No.3

Mook回答回数1312ベストアンサー獲得回数3912009/02/21 21:14:59

ポイント30pt

計算の結果というのは有効数字を考慮する必要があると思うのですが、

それは関係なく一定桁数表示したいのであれば、ToFixed で表示できます。


多少工夫してみたというサンプル程度のものですが、もともとの計算結果で表示されている

数値範囲まで表示するようにした例です。

<html>
<head>
<script type="text/javascript">
<!--
function calc(){
if ( document.m.b.value != "" ) {
		var res =  ( document.m.a.value / document.m.b.value ).toString();
        document.m.d.value = res;
    	if ( res.indexOf("e-") >= 0 ) {
            document.m.c.value =  ( document.m.a.value / document.m.b.value ).toFixed( res.indexOf("e-") + parseInt(res.substring( res.indexOf("e-") + 2, 100 ) )  - 2 );
        } else {
            document.m.c.value = res;
        }
    }
}
// -->
</script>
</head>
<body>
<form name="m">
<input type="text" name="a" onchange="calc()" size=40>
÷<input type="text" name="b" onchange="calc()" size=40>
<br>
=<input type="text" name="c" size=80>(全桁表示)
<br>
=<input type="text" name="d" size=80>(指数表示)
</form>
</body>
</html>

片手落ちですが、計算結果が1以上の指数表示には対応していません。

http://www.ee.t-kougei.ac.jp/tuushin/lecture/acss2/2/2.html

  • id:Mook
    認識されているかと思いますが、有効桁数20桁と表示桁数20桁は別のことです。
    #### e-21 以下は0になってしまいますので、目的に合わせて記述ください。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません