イントロダクション
記事「HTMLとJavaScriptで単純なアニメーション付きの横向き棒グラフを作成する-アニメーションパターン:増加割合固定」にて、グラフ上に表示する数値の有効桁数の計算のために、数値の有効桁数を計算するコードを作ってみました。有効桁数とは
信頼できる数値の桁数のことを”有効桁数”といいます。(参考文献1)いくつか例を挙げて説明します。
数値が 1.23 の場合、有効桁数は 3 桁です。
それは、"1.23" の 3 桁分の数値は信頼できるものですが、1.23 の次には何が来るかわかりません。つまり、有効桁数は 4 桁はないということです。
数値が 0.01 の場合、有効桁数は 1 桁です。
それは、0.01 の次には何が来るのかわからないからです。
0.01 と記載されていると、有効桁数が 3 桁あるように見えてしまうかもしれませんが、0.0 の部分はあくまで値の大きさを表しているだけだからです。
数値が 10.00 の場合、有効桁数は 4 桁です。
これは、10.00 という表記により、1 の次に 3 つ分の 0 があるということを明示的に示しているためです。
数値が 1000 の場合、有効桁数は 1桁~4桁のどれなのかわかりません。
この問題に対処するために、表記としては、
1000.
とすることで、有効桁数が 4 桁あることを明示しています。(参考文献2)
もしくは、指数形式で表示することで、有効桁数を明示することもできます。
1e3 -> 有効桁数は 1 桁
1.0e3 -> 有効桁数は 2 桁
1.00e3 -> 有効桁数は 3 桁
1.000e3 -> 有効桁数は 4 桁
以上を踏まえて、JavaScript で数値の有効桁数を計算するコードを作ってみました。
(JavaScript には指定した有効桁数で数値を文字列に変換するメソッド Number.prototype.toPrecision() がありますが、数値の有効桁数を取得するメソッドは見当たらなかったので、今回自作した次第です。)(参考文献3)
コード
以下のメソッド getSignificantFigures にて、数値を文字列として引数に渡すと、その数値の有効桁数を計算します。
/* 数値の有効桁数を取得する str : 10進の数値を保持したテキスト */ function getSignificantFigures(str) { // 不要な文字を消す(符号) str = str.replace(/[+-]/g, ""); // 数値の終わりの 0 の列を消す // 1000 の場合 000 を消す // 1.000 の場合 000 は消さない if (!(/^\d*\./.test(str))) { str = str.replace(/0+$/g, ""); } // 小数点を消す str = str.replace(/\./g, ""); // 数値の先頭の 0 の列を消す str = str.replace(/^0+/g, ""); // 指数形式の指数部を消す str = str.replace(/[eE]\d+/g, ""); return str.length; }
行っていることは、正規表現にて、有効桁数ではない部分を削除しています。
そして、最後には有効桁数の部分のみになるので、その部分の長さを返却しています。
結果
以下のテスト用コードを実行し、有効桁数を求めてみました。テスト用コード
var str = ""; str = "1.23"; document.writeln(str + " の有効桁数:" + getSignificantFigures(str) + " 桁<br />"); str = "0.01"; document.writeln(str + " の有効桁数:" + getSignificantFigures(str) + " 桁<br />"); str = "10.00"; document.writeln(str + " の有効桁数:" + getSignificantFigures(str) + " 桁<br />"); str = "1000."; document.writeln(str + " の有効桁数:" + getSignificantFigures(str) + " 桁<br />"); str = "1e3"; document.writeln(str + " の有効桁数:" + getSignificantFigures(str) + " 桁<br />"); str = "1.0e3"; document.writeln(str + " の有効桁数:" + getSignificantFigures(str) + " 桁<br />"); str = "1.00e3"; document.writeln(str + " の有効桁数:" + getSignificantFigures(str) + " 桁<br />"); str = "1.000e3"; document.writeln(str + " の有効桁数:" + getSignificantFigures(str) + " 桁<br />"); str = "+1.000e-3"; document.writeln(str + " の有効桁数:" + getSignificantFigures(str) + " 桁<br />");
実行結果
1.23 の有効桁数:3 桁0.01 の有効桁数:1 桁
10.00 の有効桁数:4 桁
1000. の有効桁数:4 桁
1e3 の有効桁数:1 桁
1.0e3 の有効桁数:2 桁
1.00e3 の有効桁数:3 桁
1.000e3 の有効桁数:4 桁
+1.000e-3 の有効桁数:4 桁
以上より、正しく数値の有効桁数を計算出来ていることがわかります。
なお、いかに上記メソッドを使用して、試しに計算できるテキストボックスを設置したので、使ってみてください。
参考文献
1
有効数字(有効桁数)http://fnorio.com/0034significant_figure1/significant_figure.htm
2
有効数字 - Wikipediahttp://ja.wikipedia.org/wiki/%E6%9C%89%E5%8A%B9%E6%95%B0%E5%AD%97
3
Number.prototype.toPrecision() - JavaScript | MDNhttps://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Number/toPrecision
コメントを投稿
コメント投稿機能について