【javascript】小数点以下のゼロを消して表示したい

javascriptで、数値出力のとき以下の投稿のように.toPrecisionで有効桁数を設定することがある。

このとき、値によっては、1.00000のように小数点以下にゼロが並ぶことがある。これだと少し冗長なので、小数点以下のゼロを除きたいのだが、巷の検索でヒットする方法では、小数点以下の最後の連続するゼロを正規表現で取り除く方法が一般的だ。しかし、この方法だと指数で10乗となる1.1e+10のような数値の場合、最後のゼロが除かれ1.1e+1となってしまう。

そこで、次のような関数を作って対処してみる。

function valToPrec(val, prec) {
  var val2 = Number(val.toPrecision(prec));
  var vabs = Math.abs(val2);
  if(vabs >= 1.0e5 || (vabs < 1.0e-4 && vabs > 0)) {
    return val2.toExponential();
  }
  return val2.toString();
}

関数の引数valは数値、precは有効けた数を表す整数。はじめにtoPrecisionで有効桁数を指定する。toPrecisionをすると文字列になるが、これをNumberで数値に戻す。100000を超える場合や0.0001より小さい場合は、指数表示にするためtoExponentialとしている。負の数に対応するため、絶対値をとって判定している。これ以外は、そのまま文字列に戻す。いずれも、数字の文字列が返る。

これだと、小数点以下に余分なゼロは入らない。また、大きな数値や小さな数値は指数表示してくれる。

数値と有効桁数を入力すると出力結果が表示される。

数値
有効桁数
出力結果