分数の小数展開
1/3は0.(3)、1/7は0.(142857)のように、繰り返す部分をかっこで示します。1/8のように割り切れる分数は0.125とそのまま返るので、小数が正確かどうかが一目で分かります。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- 分子
- 1
- 分母
- 8
- 値
- 0.125
- 10進数
- 0.125
単純な数値、実際の筆算による正確な小数文字列、そして展開が無限に繰り返す場合には循環ブロックが明確に示されるため、1/3 は曖昧な 0.3333333333333333 ではなく 0.(3) として返ります。 分母がゼロの場合は、ゼロによる除算が定義されないため、明確なエラーで拒否されます。すべて決定論的な算術で動作し、ネットワークも乱数もなく、最終的な浮動小数点値以外の近似もありません。
小数展開が単なる割り算以上のものである理由
誰でも電卓に割り算を入力して、画面に表示された数桁を読み取ることはできます。問題は、電卓が表示する桁数を黙って決めてしまい、隠されてしまう部分が往々にして最も重要な部分だということです。
3分の1は 0.3333333333 ではなく、0.3 が永遠に繰り返す数であり、切り捨てられた表示を真の値として扱うと、計算の後のすべての段階で累積する丸め誤差が持ち込まれます。ある余りが2度目に現れた瞬間、その時点以降の展開が循環することが保証され、循環ブロックは括弧で囲んで正確に報告されます。
1/8 のような有限小数になる分数は、埋め込みも偽の末尾桁もない、きれいな有限の文字列として返るため、手元の小数が正確なものか、無限に続くものの省略形かを常に判別できます。
アルゴリズムの仕組み
入力はまず検証されます。符号は別途処理され、絶対値は単純な整数算術で割り算できます。整数部分は1回の切り捨て除算で得られ、その後、小数部分は学校で習った古典的なループ(余りを10倍し、次の桁を取り、新しい余りを保持する)によって1桁ずつ生成されます。
各余りを最初に現れた位置に対応付けるマップが定数時間で循環を検出するため、1/7 のような分数は、際限なく続くのではなく、わずかなステップで 0.(142857) を返します。展開は小数部200桁で厳格に打ち切られ、それまでに循環が閉じなければ、文字列は正確であるかのように装うのではなく、切り捨て済みとして印が付けられます。
浮動小数点で一度だけ計算された単純な数値も、数値だけが必要な呼び出し側のために含まれています。
パイプラインのどこに適合するか
分数から小数への変換は、有理数がシステム間を移動するあらゆる場面で登場します。正確な答えを表示しなければならない教育プラットフォーム、単価を分数で保存し請求書用に小数を必要とする価格設定エンジン、インペリアル分数を小数インチに換算する計測ツール、そして記号数学ライブラリを信頼できる基準と照合するテストスイートです。
いずれの場合も危険は同じで、文書やデータベースに生き残ってしまう目に見えない丸めです。送信された内容は一切保存されず、分数は変換後に破棄され、展開だけが返されます。
活用例
教育ソフトウェアで正確な答えを表示する
1/7 を、正解した生徒の答えを誤りと判定してしまう暗黙に丸められた 0.142857 ではなく、循環ブロックを示した 0.(142857) として表示します。
請求書やレポート用に保存済みの分数を変換する
金額を整形する前に、7/12 のような有理数の単価を、展開がどこで循環するかを正確に把握したうえで小数形式に変換します。
記号数学ライブラリを検証する
テストスイートで、ライブラリの小数出力を決定論的な筆算による基準と分数ごとに比較します。
よくある質問
展開の長さに制限はありますか?
はい。 小数部は200桁に制限されています。それまでに循環が閉じなければ、文字列は省略記号で終わり、結果は正確として提示されるのではなく切り捨て済みとして印が付けられます。
入力はどこかに保存されますか?
いいえ。 分子と分母はメモリ内で処理され破棄され、小数展開だけが返されます。
循環小数はどのように表示されますか?
繰り返す部分をかっこで囲んで示します。1/3は0.(3)、1/7は0.(142857)となります。割り算の途中で同じ余りが2回目に出た時点で、そこから先が繰り返すと判断します。
分母が0のときはどうなりますか?
0で割る計算には答えがないため、結果は出さずに分かりやすいメッセージでお知らせします。無限大のような紛らわしい値を返すことはありません。
割り切れる分数はどう表示されますか?
1/8なら0.125のように、余分な0を付けずに有限の小数で返します。かっこが付いていなければ、その小数がそのまま正確な値だと分かります。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/math/decimal \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"numerator":1,"denominator":8}'const res = await fetch("https://api.kit.forhosting.com/math/decimal", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"numerator": 1,
"denominator": 8
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/math/decimal",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"numerator": 1,
"denominator": 8
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/math/decimal", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"numerator":1,"denominator":8}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"numerator":1,"denominator":8}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/math/decimal", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"numerator": 1,
"denominator": 8
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "math.decimal",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
小数展開 API は、分数(分子と分母)を受け取り、その分数が小数としてどのように表されるかを返します。API に応答するのと同じコードがこのページ上のブラウザで無料で動作するため、1つの分数を手で確認するだけなら無料で、数千件の変換を自動化するときだけお支払いいただけます。
小数展開が単なる割り算以上のものである理由
このエンドポイントは、紙の上で行うのと同じように筆算を実行し、中間の余りをすべて保持しながら、それらの余りに繰り返しが現れないか監視します。
アルゴリズムの仕組み
両方のフィールドが有限の数値である必要があり、分母はゼロであってはなりません。ゼロによる除算には定義された結果がなく、誤解を招く無限大ではなく invalid_input エラーでリクエストが拒否されるためです。
パイプラインのどこに適合するか
このエンドポイントを通して変換を行えば、比較・保存・監査できる決定論的で再現可能な文字列が得られ、真の展開が繰り返す場合には明示的な印も付きます。API 経由で1リクエスト $0.002、単位あたりの追加料金はなく、このページ上のブラウザで単発の確認を行う場合は無料です。
技術的な質問
料金はいくらですか?
1リクエスト $0.002 で、単位あたりの追加料金はありません。このページ上のブラウザでも無料で実行できます。
分母がゼロの場合はどうなりますか?
ゼロによる除算が定義されていないことを説明する invalid_input エラーでリクエストが拒否されます。分母ゼロのリクエストは課金されません。
循環小数はどのように表されますか?
循環ブロックは小数文字列内で括弧に囲まれ(1/3 は 0.(3) になります)、repeating フィールドにも単独で返されます。有限小数になる分数にはそのフィールド自体がありません。
数値を文字列として送信できますか?
はい。"22" や "7" のような数値文字列は受け付けられ変換されますが、有限の数値として解釈できなければリクエストは拒否されます。