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

JavaScriptで組み込み関数を使わずに数値を文字列へ変換する方法

問題

数値 n を引数として受け取り、それを対応する文字列に変換して返す JavaScript 関数を記述します。ただし、組み込み関数である String()toString() を使用することは禁止されており、さらに文字列連結(+ 演算子による結合)も使えないという制約が課されています。

アプローチの考え方

この問題を解く鍵となるのは、数値の各桁を一つずつ取り出して処理するという発想です。具体的には以下の手順で行います。

まず、10 で割った余りを求めることで、数値の一番下の桁(一の位)を取得します。次に、Math.floor() を使って数値を 10 で割り、処理済みの桁を切り捨てます。この操作を数値が 0 になるまで繰り返すことで、すべての桁を順番に取り出すことができます。

ここで重要なのは、余り演算の結果(0〜9 の整数)と文字列を連結すると、JavaScript の型強制(暗黙的な型変換)によって自動的に文字列になるという仕様を利用している点です。+ res という形で既存の文字列の先頭に新しい桁を追加していくことで、正しい桁順の文字列を構築しています。

コード例

以下が実際のコードです −

const num = 235456;
const convertToString = (num) => {
    let res = '';
    while(num){
        res = (num % 10) + res;
        num = Math.floor(num / 10);
    };
    return res;
};
console.log(convertToString(num));

コードの解説

  • num % 10: 現在の数値の一の位の数字を取り出します。例えば 235456 % 10 は 6 になります。
  • (num % 10) + res: 取り出した数字を文字列 res の先頭に連結します。これにより、最後に取り出した桁が先頭に来るため、元の数値と同じ並び順になります。
  • Math.floor(num / 10): 小数点以下を切り捨てることで、処理済みの一の位を除去し、残りの桁だけを次のループに渡します。
  • while(num): 数値が 0 になった時点でループを抜けます。すべての桁を処理し終えたことを意味します。

実行結果

コンソールへの出力は以下の通りです −

235456

出力結果を見ると、数値 235456 がそのまま文字列 "235456" として返されていることが分かります。この手法は負の数や小数には対応していませんが、正の整数を文字列化するシンプルかつ効率的なアプローチとなっています。

  1. JavaScriptのNumber()関数とは?使い方とサンプルコードを解説

    JavaScriptのNumber()関数は、引数として渡された値やオブジェクトを、それに対応する数値へ変換するための関数です。真偽値や文字列型の数字、さらにはDateオブジェクトなども数値に変換できるため、データ型の変換処理において非常に便利な組み込み関数の一つです。例えば、Number(true)は「1」、Number(false)は「0」を返します。また、数字のみで構成された文字列「149」を渡せば数値の149に変換され、new Date()で生成した日付オブジェクトを渡すと、1970年1月1日からの経過ミリ秒数が返されます。以下に、Number()関数の動作を確認できるサンプルコードを

  2. C言語で文字列⇔数値の相互変換を行う方法|sscanf関数とsprintf関数の使い方

    はじめにC言語のプログラミングにおいて、「文字列から数値への変換」および「数値から文字列への変換」とは何を意味するのでしょうか?本記事では、標準ライブラリ関数を使った双方向の変換方法を、構文・サンプルコード・実行結果とあわせて解説します。解決策:使用する2つの関数C言語には、この変換を実現するための関数が用意されています。sscanf() ― 文字列を数値に変換するsprintf() ― 数値を文字列に変換する文字列から数値への変換(sscanf)sscanf()関数を使うことで、文字列として格納されたデータを、書式指定子に従って解析し、数値として各変数に読み込むことができます。scanf()