JavaScriptで10進数をローマ数字に変換する方法をわかりやすく解説
JavaScriptを使って10進数の数値をローマ数字に変換する方法を紹介します。基本的な考え方は、10進数の値と対応するローマ数字の記号をペアで配列に用意し、大きい値から順に引き算しながら記号をつなげていくというものです。
ローマ数字変換の仕組み
ローマ数字には基本となる記号(I、V、X、L、C、D、M)と、4や9のような減算表記(IV、IXなど)があります。これらを値の降順に並べた配列を用意し、入力された数値から順番に引けるだけ引いていくことで、効率よくローマ数字の文字列を組み立てられます。
なお、標準的なローマ数字は1〜3999の範囲で表現されるため、この範囲外の数値はそのまま返すようにしています。
サンプルコード
以下のコードを実行すると、10進数をローマ数字に変換できます。
<!DOCTYPE html>
<html>
<body>
<script>
// ローマ数字の記号(減算表記を含む)
var romanNum = new Array();
romanNum = ["M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"];
// 対応する10進数の値
var dNum = new Array();
dNum = [1000,900,500,400,100,90,50,40,10,9,5,4,1];
function decimalRoman(value) {
// 1〜3999以外の値はそのまま返す
if (value <= 0 || value >= 4000)
return value;
var romanNumeral = "";
for (var i = 0; i < romanNum.length; i++) {
while (value >= dNum[i]) {
value -= dNum[i];
romanNumeral += romanNum[i];
}
}
return romanNumeral;
}
document.write(decimalRoman(39));
document.write("<br>" + decimalRoman(145));
document.write("<br>" + decimalRoman(520));
</script>
</body>
</html>
実行結果
XXXIX CXLV DXX
コードのポイント
- 配列の対応関係:
romanNumとdNumはインデックスが一致するように並べています。例えば「CM」は900、「XL」は40に対応します。 - whileループ: 同じ記号を複数回使えるようにするため、
forループの中でwhileを使って、現在の値より小さくなるまで同じ記号を追加します。例えば3なら「III」となります。 - 範囲チェック: 0以下または4000以上の値は変換せずにそのまま返すことで、不正な入力への対策としています。
このアルゴリズムはシンプルながら実用的で、数値を文字列として表示したい場面や、クイズ・ゲームなどのアプリケーションで活用できます。
-
JavaScriptで画像をBlobに変換する方法【サンプルコード&解説つき】
JavaScriptで画像をBlobに変換するには?Webアプリケーション開発では、画像などのファイルデータを「Blob(Binary Large Object:バイナリラージオブジェクト)」として扱いたい場面が多くあります。たとえば、画像のアップロード処理やCanvasへの描画、サーバーへのデータ送信などがその代表例です。JavaScriptでは、fetch()メソッドとBlobオブジェクトを組み合わせることで、URLから取得した画像を簡単にBlobへ変換できます。以下に実際のサンプルコードを示します。サンプルコード<!DOCTYPE html> <html lang=&q
-
JavaScriptで整数を2進数に変換する方法
JavaScriptで整数を2進数に変換する基本の考え方JavaScriptで整数を2進数に変換するには、対象の整数を2で割り、その都度発生する余りを順番に記録していく方法が使われます。余りは必ず0か1になるため、計算が終わった後にこれらを逆順に並べると、元の整数の2進数表現が完成します。なお、実際の開発では toString(2) メソッドを使えば1行で変換できますが、ここでは変換の仕組み(アルゴリズム)を理解できるよう、剰余演算を用いた実装例を紹介します。サンプルコードfunction convertDecimalToBinary(value) { var binar