JavaScriptで数値を最も近い10の累乗に丸める関数の実装方法
本記事では、数値を受け取り、その数値に最も近い10の累乗(べき乗)を返すJavaScript関数の実装方法について解説します。
要件
入力された数値に対して、最も近い10の累乗を返す関数を作成します。期待される動作は以下の通りです。
f(1) = 1
f(5) = 1
f(15) = 10
f(43) = 10
f(456) = 100
f(999) = 100
コード例
実際のコードは以下のようになります。
const num = 2355;
const num1 = 346;
const num2 = 678;
const nearestPowerOfTen = (num) => {
let count = 0;
while(num > 1){
count++;
num /= 10;
}
return Math.pow(10, count - 1) * (Math.round(num) ? 10 : 1);
}
console.log(nearestPowerOfTen(num)); // 1000
console.log(nearestPowerOfTen(num1)); // 100
console.log(nearestPowerOfTen(num2)); // 1000
処理の仕組み
この関数は、次の3つのステップで目的の値を算出しています。
- 桁数のカウント: 数値を10で割り続け、1以下になるまでの回数をカウントします。これにより、元の数値のおおよその桁数が判明します。
- 四捨五入の判定: ループ終了後に残った値(0〜1の小数)を
Math.round()で四捨五入します。0.5以上なら「1」、それ未満なら「0」となります。 - 結果の計算: 判定結果が「1」の場合は10倍して上位の累乗へ繰り上げ、「0」の場合はそのまま下位の累乗を返します。
出力結果
上記のコードをコンソールで実行すると、次の出力が得られます。
1000
100
1000
このように、2355は1000に、346は100に、678は1000にそれぞれ丸められます。
別のアプローチ:対数を使った簡潔な実装
Math.log10()を利用すると、ループ処理を使わずに同じ結果をより簡潔に得ることができます。
const nearestPowerOfTen = (num) => {
return Math.pow(10, Math.round(Math.log10(num)));
}
console.log(nearestPowerOfTen(2355)); // 1000
console.log(nearestPowerOfTen(346)); // 100
console.log(nearestPowerOfTen(678)); // 1000
常用対数(log10)は「10を何乗するとその数になるか」を表すため、これを四捨五入すれば最も近い累乗の指数が直接求まります。可読性とパフォーマンスの両面で優れているため、実務ではこちらの方法が推奨されます。
-
JavaScriptのNumber()関数とは?使い方とサンプルコードを解説
JavaScriptのNumber()関数は、引数として渡された値やオブジェクトを、それに対応する数値へ変換するための関数です。真偽値や文字列型の数字、さらにはDateオブジェクトなども数値に変換できるため、データ型の変換処理において非常に便利な組み込み関数の一つです。例えば、Number(true)は「1」、Number(false)は「0」を返します。また、数字のみで構成された文字列「149」を渡せば数値の149に変換され、new Date()で生成した日付オブジェクトを渡すと、1970年1月1日からの経過ミリ秒数が返されます。以下に、Number()関数の動作を確認できるサンプルコードを
-
JavaScriptで数字パターンを表示する方法【初心者向けサンプルコード】
本記事では、テキスト入力欄とボタンを備えたJavaScript・HTMLプログラムの作成方法を解説します。ユーザーが入力欄に任意の数値(例:5)を入力してボタンをクリックすると、画面に以下のような数字パターンが表示される仕組みです。(n = 5 の場合の出力例)01 01 02 01 02 03 01 02 03 04 01 02 03 04 05仕組みのポイントこのパターンは二重ループ(ネストしたforループ)を使うことで実現できます。外側のループが「行」を制御し、内側のループがその行に表示する「数字の個数」を制御します。i 行目には 1 から i までの数字が順番に出力されるため、行が進む