逆算の計算機
この逆算の計算機で、最終的な金額とパーセントから元の値を、あるいは部分から全体を求められます。「80は何の4か」という問い、「何の何%か」を求める計算機の問い、VATの除き方、六つの例題も扱います。
例の値が入力されています。ご自身の値に置き換えてください。
元の値
80
計算過程
- 1 + 20 ÷ 100 = 1.2
- 96 ÷ 1.2 = 80
- 変化した量
- 16
コートが15%引きで68ドルでした。セール前の価格はいくらだったでしょうか。68ドルに15%を足し戻すのが、よくある間違いです。セール価格は元の価格の85%なので、元の価格は68ドル ÷ 0.85 = 80ドルです。
モードを選び、最終的な金額とパーセントを入力すると、この逆算の計算機が計算の過程つきで元の金額を返します。増加率を元に戻す、減少率を元に戻す、あるいは「80は何の4%か」のように、ある数が全体の何%にあたるかが分かっているときの全体を求める、のいずれかです。
逆算のしくみ
結論: 最終値を倍率で割ります。倍率は、増加なら1にパーセントを足した数、減少なら1からパーセントを引いた数です。20%上がって96ドルになった価格は、96ドル ÷ 1.20 = 80ドルです。
逆算とは
逆算の問題は、パーセントによる変化の結果を示して、最初の金額を尋ねます。部分とそれが表すパーセントが分かっているときの全体を求める、関連した問いも含みます。どちらも、ふつうの計算を逆向きに行うものなので、「パーセントの逆向きの問題」として検索されることもあります。
増加または減少を逆算する方法
元の値 = 最終値 / (1 + p / 100) (p%の増加のあと)
元の値 = 最終値 / (1 - p / 100) (p%の減少のあと)
- パーセントを小数にします(15%は0.15)。
- 倍率を求めます。増加なら1に小数を足し、減少なら1から小数を引きます。
- 最終値を倍率で割ります。
パーセントは元の値から取られたものなので、最終的な金額は、元の値に倍率を掛けたものに等しくなります。
パーセントから元の値を求める方法
部分が未知の全体の既知のパーセントにあたるときは、部分をパーセントの小数で割ります。「80は何の4%か」なら、全体は 80 ÷ 0.04 = 2,000 です。同じ規則で、「16は何の40パーセントか」(16 ÷ 0.40 = 40)や「何の15%が3か」(3 ÷ 0.15 = 20)にも答えられます。
「80は何の4か」のような問いの読み方
「80は何の4か」のような検索は%記号を省いていますが、意味は「80は何の4%か」です。一般的な型は「xは何のyパーセントか」で、答えは x ÷ (y ÷ 100) です。上の計算機のモード3は、これを一度に行います。答えは掛け戻して確かめられます。2,000 × 0.04 = 80 です。
計算機を使わない方法
元の値を100%と考えます。20%の増加のあと、最終的な金額は120%です。120%が96なら、1%は 96 ÷ 120 = 0.8 で、100%は 0.8 × 100 = 80 です。この単位量あたりで考える方法は、倍率で割るのと同じ答えになり、筆算の形で書き出しやすい方法です。
パーセントを最終値から引いてはいけない理由
96ドルから20%引くと76.80ドルになり、80ドルにはなりません。20%の上昇は、元の80ドルに対して求めたもので、16ドルでした。96ドルの二十パーセントは19.20ドルで、これは別の金額です。基準が大きいからです。
VATや消費税を合計から除く方法
税は増加率の一種なので、除くことは逆算にあたります。20%のVATを含む120ポンドの価格は、税抜き価格が 120ポンド ÷ 1.20 = 100ポンドで、VATは20ポンド、合計の六分の一です。8%の消費税を含む米国の合計108ドルは、108ドル ÷ 1.08 = 100ドルが税引き前の金額になります。
続けて二回の変化を逆算する
値が二回の変化を経たときは、それぞれの倍率で割るか、その積で割ります。20%上がり、そのあと10%下がった108ドルの価格は、108ドル ÷ (1.20 × 0.90) = 100ドルから来ています。20%引いてから10%を足して戻してはいけません。それでは95.04ドルになります。
答えを順方向で確かめる
パーセントを逆算したら、答えにパーセントを順方向に当てはめて確かめます。元の値が80ドルでセールが15%引きなら、80 × 0.85 = 68となり、一致します。
逆算が出てくる場面
パーセントから元の値を計算するには、分かっているところから始めます。セール後の価格、税込みの合計、成長後の数字などです。10%上がって1,595ドルになった家賃は、1,595ドル ÷ 1.10 = 1,450ドルでした。「何の何%か」は別の問いです。パーセントが未知だからです。それはホームページのパーセント計算機で解けます。
ExcelとGoogle Sheetsでの逆算
最終値がB2、パーセントが小数またはパーセント表示のセルとしてC2にあるとき、増加を逆算するには=B2/(1+C2)、減少を逆算するには=B2/(1-C2)と入力します。部分とパーセントの場合は=B2/C2を使います。
制限
100%の減少では何も残らず、−100%以下の増加は本当の増加ではないので、元の値は復元できません。パーセントが0の場合も、全体は求まりません。計算機はこの三つすべてを拒否し、理由を示します。
逆算の例題
よく使うパーセントについて、割る倍率の一覧です。
| パーセント | 増加後 | 減少後 |
|---|---|---|
| 5% | 1.05 | 0.95 |
| 10% | 1.10 | 0.90 |
| 15% | 1.15 | 0.85 |
| 20% | 1.20 | 0.80 |
| 25% | 1.25 | 0.75 |
| 50% | 1.50 | 0.50 |
例題1:15%引きで68ドルのセール価格
条件
答え
例題2:VATを除く、20%のVAT込みで120ポンド
条件
答え
例題3:給与、5%上がって52,500ドル
条件
答え
例題4:人口、8.5%増えて9,114人
条件
答え
例題5:80は何の4%か
条件
答え
例題6:二回の変化、+20%のあと−10%で108ドル
条件
答え
逆算のコード
どちらのバージョンも、上の例の結果(80ドル、50,000ドル、8,400、2,000、100)を再現し、数値以外の入力を拒否し、逆算できないケースを受け付けません。
JavaScript
function finite(name, v) { if (typeof v !== "number" || !Number.isFinite(v)) throw new TypeError(`${name} must be a finite number`);}export function originalAfterIncrease(final, percent) { finite("final", final); finite("percent", percent); if (percent <= -100) throw new RangeError("percent must be greater than -100"); return final / (1 + percent / 100);}export function originalAfterDecrease(final, percent) { finite("final", final); finite("percent", percent); if (percent >= 100) throw new RangeError("percent must be less than 100: nothing can be recovered from a 100% decrease"); return final / (1 - percent / 100);}export function wholeFromPart(part, percent) { finite("part", part); finite("percent", percent); if (percent === 0) throw new RangeError("percent must not be 0"); return (part * 100) / percent;}Python
from decimal import Decimalimport mathdef _num(name, v): if isinstance(v, bool) or not isinstance(v, (int, float, Decimal)) or not math.isfinite(float(v)): raise ValueError(f"{name} must be a finite number") return Decimal(str(v))def original_after_increase(final, percent): final, percent = _num("final", final), _num("percent", percent) if percent <= -100: raise ValueError("percent must be greater than -100") return final / (1 + percent / 100)def original_after_decrease(final, percent): final, percent = _num("final", final), _num("percent", percent) if percent >= 100: raise ValueError("percent must be less than 100: nothing can be recovered from a 100% decrease") return final / (1 - percent / 100)def whole_from_part(part, percent): part, percent = _num("part", part), _num("percent", percent) if percent == 0: raise ValueError("percent must not be 0") return part * 100 / percent二回続けての変化は、それぞれの倍率で順に割ります。originalAfterIncrease(originalAfterDecrease(108, 10), 20)は100を返します。割り算は長い小数になることがあるので、丸めるのは表示するときだけにしてください。金額にはDecimalか、整数のセント単位を使ってください。
プライバシーと入力の安全性
値の計算はブラウザー内で行われます。入力した数値がサーバーに送られたり、保存されたりすることはありません。
- 入力欄には数値だけを入力できます。文字、空欄、NaN、Infinityはメッセージつきで拒否され、入力した内容がコードとして実行されることはありません。
- カンマの直後にちょうど3桁が続く場合は千の位の区切りとして読み、1,200 は 1200 になります。それ以外のカンマは小数点として扱うため、12,50 は 12.50 で、0 で始まる 0,500 のような数は小数として読みます。1.234,5 のような混在形式や 1,2,3 のようなあいまいな入力は、推測せずに拒否します。桁区切りの空白(改行されない空白を含む)は無視します。
- 結果は表示のときだけ丸めるので、計算の過程で丸め誤差が積み重なることはありません。
逆算でよくある間違い
| 間違い | 何が起こるか | 計算機の動作 |
|---|---|---|
| 最終値からパーセントを引く | 96ドルから20%を引くと76.80ドルで、80ドルにならない | 倍率で割る |
| 値下げ後の価格にパーセントを足す | 68ドルに15%を足すと78.20ドルで、80ドルにならない | 0.85で割る |
| 増加と減少を取り違える | 68ドルを15%の増加の結果として扱うと59.13ドルになり、80ドルにならない | モードを選ばせ、倍率を示します |
| パーセントだけで割る | 96 ÷ 0.20は480で、80にならない | 1にパーセントを足した数、または引いた数で割る |
| 部分にパーセントをかける | 80 × 4% は3.2、全体は 80 ÷ 4% = 2,000 です | 部分と全体のモードで割ります |
| 二回の変化の逆算で符号を入れ替える | 108ドルを−20%、続けて+10%で逆算すると95.04ドルで、100ドルにならない | 倍率の積で割ります |
| 100%の減少を逆算する | 最終値がゼロなので、取り戻すものがない | メッセージを表示して受け付けない |
| 倍率を丸める | 7.5%の増加に1.08を使うと、結果がずれる | 正確なパーセントを使い、丸めるのは表示だけです |
逆算とほかのパーセントの問いの違い
| 問 | 分かっているもの | 求めるもの | 公式 |
|---|---|---|---|
| 増加の逆算 | 最終値、増加のパーセント | 元の値 | 最終値 ÷ (1 + パーセント ÷ 100) |
| 減少の逆算 | 最終値、減少のパーセント | 元の値 | 最終値 ÷ (1 − パーセント ÷ 100) |
| 部分から全体を求める | 部分、パーセント | 全体 | 部分 ÷ (パーセント ÷ 100) |
| ある数のパーセント | 全体、パーセント | 部分 | 全体 × パーセント ÷ 100 |
| 何パーセントか | 部分、全体 | パーセント | 部分 ÷ 全体 × 100 |
| 変化率 | 元の値、最終値 | 変化率 | (最終値 − 元の値) ÷ 元の値 × 100 |
逆算の行だけが、未知の値が最初の金額になっています。ほかはすべて、最初の金額から順方向に計算します。