使い方
1 行 1 値で入力し、変換方向 (小数 → 分数 / 分数 → 小数) を選んで「変換」を押します。**小数 → 分数** は既定で「厳密モード」: 0.75 → 3/4、0.625 → 5/8、0.(3) → 1/3 のように、有限小数と循環小数を厳密な既約分数に変換します。「近似」を ON にすると連分数アルゴリズムで分子・分母が最大分母以下になる最良近似を返し、3.14159 → 355/113 のような有名な近似が得られます。**分数 → 小数** は 3/4 → 0.75 のように小数化し、割り切れない場合は 1/3 → 0.(3)、22/7 → 3.(142857) のように循環節を () で括って表示します。帯分数 (1 1/2 のようなスペース区切り) は両方向で扱えます。無効な行は `?` でラインを揃えながらエラーカウントに加算します。
詳細解説
数値の文脈こそが機微情報になる
分数・小数の変換それ自体は公共の計算です。しかし「なぜその数値を変換しているか」というコンテキストは、場合によってきわめて機微になります。医療現場では 1/4 mg → 0.25 mg のような投薬量計算、調剤棚卸でのグラム換算、工場の歩留まり計算で不良率の小数分数変換 — 数値の前後の作業文脈が漏れると、医療上のエラーや製造上の機密情報になりうる数値が外部に出ることになります。
エンジニアが Stern-Brocot 近似のような高度な機能を必要とするシーンでは、π の近似値を求めている研究メモや、暗号プロトコルのパラメータ候補値を確認していることが推測されることもあります。「計算の中間値をオンラインツールに貼り付ける」習慣は、業務上の数値が気づかないうちに外部運営者の手に渡るリスクを内包しています。
「シンプルな計算ツール」に仕込まれるトラッカーのリスク
分数・小数変換のような単純なユーティリティほど、広告 SDK や行動分析ツールを無造作に組み込まれていることがあります。利用者は「危ないツールとは思わない」から警戒せず、業務上の数値をそのまま貼り付けてしまいます。フォーム送信時にサーバー側でログを取る実装や、Google Analytics の form submit イベント計測で入力値が payload に含まれるパターンは珍しくありません。
入力した分数・小数は「どんな計算をしているか」の記録を運営者に渡しています。単発の数値は無害でも、IP アドレスや Cookie で紐づいたセッション履歴が蓄積されると、業務上の計算パターンが外部に残ります。
十進文字列パースと Stern-Brocot 木をブラウザ内で実行する仕組み
このツールは小数→分数の「厳密モード」では、入力文字列を十進文字列として直接パースします。Number.parseFloat を経由しないため IEEE 754 の浮動小数点誤差が入らず、0.1 が正確に 1/10 になります。「近似モード」では Stern-Brocot 木 / 連分数展開アルゴリズムを JavaScript で実装しており、最大分母以下で最良近似の分数を探索します。循環小数 0.(3) → 1/3 のような変換も正規表現で循環節を抽出してから正確な分数を逆算します。
これらの計算はすべてブラウザのページメモリ内で実行されます。外部ライブラリへの呼び出しも API へのリクエストも発生しません。DevTools の Network タブを開きながら変換を実行しても、ページ初期ロード後のリクエストはゼロです。
業務・学習での使いどころと注意点
医療や工学での換算、レシピの分量スケール計算、数学の宿題での確認 — 用途はさまざまですが、いずれも「手元で完結させる」ことが安全です。特に医療投薬量の計算は、桁違いのエラーが重大な結果を招くため、このツールの結果を参考にしつつ、最終確認は薬剤師や医師との確認プロセスを別途経ることをお勧めします。循環小数の () 表記は JIS 標準表記に準拠しているため、日本の教育・業務文脈での共有にも使えます。
Stern-Brocot 木と連分数 — π → 355/113 が出る理由
任意の小数を「分母が小さく誤差も小さい分数」で近似する最良の方法は、連分数展開 (Continued Fraction) です。π = 3.14159265... を連分数で書くと π = 3 + 1/(7 + 1/(15 + 1/(1 + 1/(292 + ...)))) となり、途中で打ち切った値が 3, 22/7, 333/106, 355/113, 103993/33102, ... という最良有理近似列を生成します。355/113 (Milü, 祖沖之 5 世紀) が驚くほど精度が高い (誤差 < 0.0000003) のは、次の係数が 292 と非常に大きいためで、これは π という無理数の「数論的に偶発的」な性質です。
本ツールの近似モードは内部で Stern-Brocot 木 と等価な再帰アルゴリズムを使い、[low, high] の有理数区間を探索しながら、mediant = (a+c)/(b+d) を取って次の候補を絞り込みます。連分数展開と Stern-Brocot 木は同じ最良近似列を生成することが数論的に証明されており、JavaScript 上では BigInt を使わずに Number 精度の範囲 (分母上限 100 万程度) で安全に動きます。「分母上限」を設定するのは、近似精度と分数の見やすさのトレードオフをユーザーが選べるようにするためで、1000 までで止めれば日常用途、100 万 まで広げれば数学的に最良の近似が得られます。
IEEE 754 と循環小数 — 0.1 + 0.2 ≠ 0.3 を厳密モードが回避する仕組み
0.1 を IEEE 754 double 形式 で表すと、実際には 0.1000000000000000055511151231257827021181583404541015625 という 2 進無限循環の打ち切り値になります。これが 0.1 + 0.2 = 0.30000000000000004 という有名なバグの原因で、Number.parseFloat("0.1") を一度でも経由すると、もとの 1/10 という有理数情報は永久に失われます。本ツールの厳密モードは入力文字列 "0.1" を直接十進パースし、分子 1, 分母 10 を作ってから gcd で約分するため、IEEE 754 の落とし穴を完全に回避します。
循環小数の処理は別のロジックです。0.(3) = 1/3 のような循環節を持つ十進表記は、x = 0.333..., 10x = 3.333..., 10x − x = 3, x = 3/9 = 1/3 という代数操作で厳密分数に戻せます。本ツールは正規表現で循環節 (N) を抽出し、分母 = (10^循環桁数 − 1) × 10^非循環桁数、分子 = 非循環部 と循環部 を組み合わせた整数 で逆算します。たとえば 0.16(6) = 1/6 は 非循環 = 16, 循環 = 6, 分母 = (10^1 − 1) × 10^2 = 900, 分子 = (16 × 10 + 6) − 16 = 150 で 150/900 = 1/6 と既約化されます。JIS の循環小数表記 0.1̇6̇ や上点付き .6̇ を (6) 表記で代替しているのは、入力欄でアクセス可能な ASCII 文字だけで完結させるためです。レシピでの分量スケーリングなら recipe-unit-convert と組み合わせると ml と分数表記が一気通貫で扱え、確率や歩留まりを百分率に直したいときは percent-calc を使うと入力値をブラウザの外に出さずに処理できます。
よくある質問
- 入力データはサーバーに送信されますか?
- いいえ。すべてブラウザ内で完結します。数値演算のみで外部 API も使いません。
- 循環小数の `()` 表記とは?
- () の中身が循環節 (繰り返しブロック) を意味します。例: 0.(3) = 0.333... = 1/3、0.(142857) = 0.142857142857... = 1/7、0.1(6) = 0.1666... = 1/6。最初の `()` 外の部分は非循環節、`()` の中身が循環節です。日本でも JIS の標準表記として採用されており、欧米でも一般的です。
- 近似モード (連分数) はどんなアルゴリズム?
- Stern-Brocot 木 / 連分数展開 (continued fractions) を使い、|x - p/q| を最小化する分子 p / 分母 q のペアを最大分母以下で探索します。π → 355/113 のように、有名な近似 (Best Rational Approximations) と一致します。最大分母を 99 以下にすると 22/7、113 以下にすると 355/113、1000 以下にしてもなお π は 355/113 が出ます。
- 帯分数 (1 1/2 など) は入力できますか?
- できます。整数部と分数部の間をスペースで区切ってください: `1 1/2`、`-2 3/4`。分数部の分子は分母より小さい必要があります (`1 3/2` のような帯分数は無効、`3/2` または `1 1/2` で入れてください)。出力側は「帯分数」オプションを ON にすると分子 ≥ 分母の結果が帯分数表記になります。
- 分母が 0 や負の数だとどうなりますか?
- 分母 0 は数学的に未定義なのでエラー (`?`) になります。分数の負号は分子か全体に付け、`3/-4` のような分母側の負号は受け付けません (`-3/4` で入れてください)。
- なぜ 0.1 + 0.2 は 0.3 にならない問題と関係があるんですか?
- 本ツールは入力文字列を **十進文字列のまま** 解釈するので、IEEE 754 浮動小数の誤差を踏みません。0.1 を入れると正確に 1/10、0.2 で 1/5、0.3 で 3/10 になります。近似モードは内部で `Number.parseFloat` を経由するので浮動小数の影響を受けますが、最大分母を小さくしておけばノイズは丸められます。
「送らない」を確かめるには
このツールは入力データを外部に送信しません。仕組み・監査手順・運営方針は以下で詳しく説明しています。
類似のツール
料理の単位換算 (大さじ / 小さじ / カップ ⇄ US tsp / tbsp / cup / fl oz)
料理レシピの単位を日本式 (小さじ 5 ml / 大さじ 15 ml / カップ 200 ml / 合 180 ml) と米式 (US tsp 4.93 ml / US tbsp 14.79 ml / US cup 236.59 ml / fl oz 29.57 ml) で **同時** 相互換算します。重さ (g / kg / oz / lb) もカテゴリ切替で対応。アメリカや海外のレシピを日本のキッチンで作るとき、また日本のレシピを英語サイトに投稿するときに。**US カップは日本カップより約 18% 大きい** ため、そのまま流用するとレシピの仕上がりが薄まる落とし穴を回避できます。容量と重さは素材の密度が違うため別カテゴリ扱い (FAQ で詳述)。すべてブラウザ内で完結し、サーバーへ送信しません。
単位変換
長さ・重さ・温度・体積・面積・速度・データ容量・時間を相互変換します。入力値を 1 つ入れるだけで、同じカテゴリの全単位での換算結果を一覧表示。すべてブラウザ内で計算され、データはサーバーに送信されません。
パーセント計算機 — 割合・増減率・%加算 / 減算の汎用ツール
「100 の 30% は?」「30 は 100 の何%?」「A → B への変化率」「X % 増減した値」の 4 種類を Mode 切替で計算できる割合の汎用ツール。割引価格・前年比・歩留まり・税抜→税込のカスタム税率・チップ計算・成績の達成率など、買い物 / 家計 / ビジネスで頻出する割合計算を 1 つの画面で。実行ボタンなしのライブ計算、小数点桁数 0〜10 桁の切替、結果コピー対応。すべてブラウザ内で処理。
進数変換 — 2 / 8 / 10 / 16 進数を相互
10 進数を 2 進・8 進・16 進数に、その逆も一発変換。入力進数 (Mode) を切り替えると、その値を残り 3 つの進数で同時表示。0b / 0o / 0x プレフィックス付き表示や、4 桁ごとの区切りもオプションで切替できます。すべてブラウザ内の BigInt 演算で精度を保証。