数値を表示するとき。3.1415926535…のように、必要以上に有効桁数を無視した長い文字列になるのを回避したいことがあります。また、数表作成などでは、数値の桁数を合わせたり、小数点位置を合わせたりしたくなります。
ここでは、数値を文字時列として表示するときの工夫を考えます。
いくつかの数値について、結果を示します。「固定桁数」「小数点固定」では、実際の半角空白を「*」で表示しています。
組込み関数です。小数部桁数以下を四捨五入します。
元数値の小数部桁数が指定桁数より小さいとき、右側に0が付加されます。
組込み関数です。有効桁数とは、数字の個数であり、小数点、負記号、指数部などを含まないので、表示時の桁数は一定しません。
元数値の有効桁数が指定桁数よりも小さいときは、小数点以下の右側に0が付加されます。
指定行数よりも大きいときは、四捨五入されます。
元数値の絶対値が大きく、指定桁数に入りきらないときは指数表示されます。
小数点以下3位までを四捨五入します。
function Round(数値) { return Math.round(数値*1000)/1000; }
としているだけです。
単純なので、ライブラリにはしていません。
1000 を 100,10000 とすることにより、小数点以下2位, 4位に変更できます。
これ以降は自作の関数です。戻り値は次の規則に従った文字列になります。文中に計算結果の数値を表示するのに役立ちます。
<script type="text/javascript">
function 最大桁数(数値, 桁数) {
var 文字列;
var 最小値 = 1;
for (var i=0; i<桁数; i++) {
最小値 = 10*最小値;
}
var 最大値 = 10*最小値;
最小値 = -最小値;
if (数値 > 最大値) {
文字列 = 数値.toExponential(桁数-5);
if (文字列.length > 桁数) 文字列 = "overfrow ".substring(0,桁数);
return 文字列;
}
else if (数値 < 最小値) {
文字列 = 数値.toExponential(桁数-6);
if (文字列.length > 桁数) 文字列 = "overfrow ".substring(0,桁数);
return 文字列;
}
文字列 = new String(数値); // A
var 差 = 文字列.length - 桁数; // B
if (差 > 0) {
文字列 = 文字列.substring(0, 桁数); // C
}
return 文字列; // D
}
青字の部分
黒字の部分
数値を指定した桁数の文字列に変換します。数表作成などに役に立ちます。
<script type="text/javascript">
function 固定桁数(数値, 桁数) {
「最大桁数」の青字部分と同じ
文字列 = new String(数値); // A
var 差 = 文字列.length - 桁数; // B
if (差 > 0) {
文字列 = 文字列.substring(0, 桁数); // C
}
else {
for (i=0; i<-差; i++) { // E
文字列 = 文字列 + " "; // F
}
}
return 文字列; // D
}
「最大桁数」に赤字の部分を加えただけです。
例えば指定桁数が7で、数値の文字列が "12.3" の4桁の場合、差は-3なので赤字の部分が実行されます。
Eは、for (i=0 i<3; i++) となり、Fは右端に1個の半角空白を付加するのですから、3個の半角空白が加えられ「12.3***」の7桁になります。
小数点があるので、全体の桁数は「整数部桁数 + 1 + 小数部桁数」になります。
数表作成で桁数とともに小数点位置をそろえる必要がある場合に役立ちます。
<script type="text/javascript">
function 小数点固定(数値, 整数部桁数, 小数部桁数) {
「最大桁数」の青字部分と同じ
// ===== 整数部文字列と小数部文字列の初期設定 =====
文字列 = new String(数値);
var 小数点位置 = 文字列.search(/\./);
// 小数点がある場合 → 小数点位置で分離
if (小数点位置 >= 0) {
小数点 = ".";
整数部文字列 = 文字列.substring(0, 小数点位置);
小数部文字列 = 文字列.substring(小数点位置+1, 文字列.length);
}
// 小数点がない場合 → 文字列がそのまま整数部文字列
else {
小数点 = " ";
整数部文字列 = 文字列;
小数部文字列 = "";
}
// ===== 整数部の調整 =====
var 差 = 整数部文字列.length - 整数部桁数;
// ク:数値の整数部桁数が指定整数部桁数より大 → 小数点位置をずらす
if (差 > 0) {
整数部桁数 = 整数部桁数 + 差;
小数部桁数 = 小数部桁数 - 差;
}
// キ:数値の整数部桁数が指定整数部桁数より小 → 左側に半角空白を詰める
else {
for (i=0; i< -差; i++) {
整数部文字列 = " " + 整数部文字列;
}
}
// ===== 小数部の調整 =====
差 = 小数部文字列.length - 小数部桁数;
// オ:数値の小数点以下の桁数が小数部桁数より大 → 右側を切り捨て
if (差 >= 0) {
小数部文字列 = 小数部文字列.substring(0, 小数部桁数);
}
// カ:数値の小数点以下の桁数が小数部桁数より小 → 右側に半角空白を詰める
else {
for (i=0; i< -差; i++) {
小数部文字列 = 小数部文字列 + " ";
}
}
文字列 = 整数部文字列 + 小数点 + 小数部文字列;
return 文字列;
}
</script>