人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: imsut
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:JavaScript 普通に 計算
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● pahoo
●50ポイント ベストアンサー

toFixedを使います。

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

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


2 ● GoldenDawn
●30ポイント

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>

3 ● Mook
●30ポイント

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

それは関係なく一定桁数表示したいのであれば、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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ