JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptで数値を7進表現(基数7)に変換する方法を解説

7進数への変換の基本

2進数への変換では、10進数の数値を繰り返し2で割りながら余りを記録していきます。これとまったく同じ考え方で、7進数への変換では、対象の数値を繰り返し7で割っていくことで7進表現を求めることができます。

今回作成するのは、任意の数値を受け取り、その7進表現を返すJavaScript関数です。

たとえば、以下のような結果になります。

base7(100) = 202

100を7進数で表すと「202」となります。これは、100 ÷ 7 = 14 余り 2 → 14 ÷ 7 = 2 余り 0 → 2 ÷ 7 = 0 余り 2 という一連の除算で得られた余りを、下の桁から順に並べたものです。

実装コード

const num = 100;
const base7 = (num = 0) => {
    let sign = num < 0 && '-' || '';
    num = num * (sign + 1);
    let result = '';
    while (num) {
        result = num % 7 + result;
        num = num / 7 ^ 0;
    }
    return sign + result || '0';
};
console.log(base7(num));

コードのポイント

  • 符号の分離:入力が負の数の場合は、その符号を変数signに退避させ、絶対値に変換したうえで計算を行います。最後に符号を結果の先頭に付けて返すため、負の数にも対応できます。
  • 余りの収集:whileループ内では、7で割った余り(num % 7)を結果文字列の先頭に連結していきます。これにより、最終的に桁が上位から下位へと正しい順序で並びます。
  • 整数への切り捨て:num / 7 ^ 0は、XOR演算子(^)の性質を利用して小数部を切り捨てるテクニックです。Math.trunc()などでも同様の処理が可能です。
  • ゼロの扱い:引数が0の場合、ループは一度も実行されないため、戻り値として文字列「0」が返されるようになっています。

出力結果

コンソールには次のように表示されます。

202

もっと簡単な方法:toString()を活用する

実は、JavaScript標準のNumber.prototype.toString()メソッドは、引数に2〜36の基数を指定できるため、7進数への変換はわずか1行で実現できます。

const base7 = (num) => num.toString(7);

console.log((100).toString(7));  // '202'
console.log((-100).toString(7)); // '-202'
console.log((0).toString(7));    // '0'

この方法であれば、負の数や0も自動的に正しい形式へ変換されます。変換アルゴリズムそのものを学習したい場合を除き、実務ではこちらのシンプルな方法を採用するのがおすすめです。

  1. バニラJavaScriptで文字列を数値に変換する方法|parseInt関数の使い方を解説

    parseInt関数とはバニラJavaScriptで文字列を数値に変換する最も基本的な方法が、グローバル関数のparseIntです。この関数は、文字列として渡された値を指定した基数(進数)に基づいて解釈し、整数を返します。構文parseInt(string, radix);各引数の意味は以下の通りです。string ― 解析対象となる値です。引数が文字列以外の場合は、ToStringメソッドによって自動的に文字列へ変換されます。また、先頭の空白文字は無視されます。radix ― 文字列の基数(数学的な記数法における底)を表す、2から36までの整数です。基数を指定してさまざまな進数を整数に変換で

  2. JavaScriptの数値(Number)の基本と実践サンプルコード

    JavaScriptでは、整数も小数もすべて「Number」型として扱われます。この記事では、数値変数の定義方法と、それらを使った簡単な演算の例を、動作するHTMLサンプルコードとともに紹介します。サンプルコード以下は、JavaScriptで数値を扱う基本的な例です。整数(22、99)と小数(1.523)を変数に格納し、ボタンをクリックすると画面に表示する仕組みになっています。<!DOCTYPE html> <html lang=ja> <head> <meta charset=UTF-8 /> <meta name=viewport co