パーセント加算計算機(割合を引く計算にも対応)
パーセント加算計算機は、数に割合を足したり引いたりして、使った倍率も示します。割合の足し方、数から割合を引く方法、消費税・チップ・昇給での加算も扱います。
例の値が入力されています。ご自身の値に置き換えてください。
結果
84
計算過程
- 1 + 40 ÷ 100 = 1.4
- 60 × 1.4 = 84
- 加えた量または引いた量
- 24
- 倍率
- 1.4
1,200ドルの請求書に8.25%の消費税を加えたい、あるいは240ドルの価格を15%下げたい、という場面を考えます。「〇%の」を先に求める手順は省けます。足すなら1.0825を、引くなら0.85を掛ければ、最終的な金額が一度で求まります。
この割合を足す計算機に数と割合を入力し、足すか引くかを選ぶと、新しい合計、足した(引いた)金額、使った倍率が表示されます。下には公式、六つの例題、割合どうしを足したいときの考え方があります。消費税、チップ、昇給のための割合加算計算機としても、割引や削減のための割合減算計算機としても使えます。
割合を足す方法と引く方法
結論: 数に割合を足すには、1に割合(小数)を足した値を掛けます。引くには、1から割合を引いた値を掛けます。80に20%を足すと80 × 1.2 = 96、80から20%を引くと80 × 0.8 = 64です。
数に割合を足す方法
- 割合を100で割って小数にします。20%は0.2です。
- 1を足して倍率を求めます。1.2です。
- 数に倍率を掛けます。80 × 1.2 = 96です。
基準になる数に割合を足すにはどうすればよいでしょうか。上のように一段階で足せます。遠回りの方法、つまり80の20%は16で、80 + 16 = 96とする方法でも同じ答えになります。
数から割合を引く方法
- 割合を小数にします。15%は0.15です。
- 1から引いて倍率を求めます。0.85です。
- 掛けます。240 × 0.85 = 204です。
同じ手順は在庫数のような整数にも使えます。電卓の%キーは機種によって動作が異なるので、倍率を使うのが確実です。240 × 0.85と入力します。
足した割合を元に戻す
20%を足すのは × 1.2、20%を引くのは × 0.8です。足した結果を元に戻すには、倍率で割ります。96 ÷ 1.2 = 80です。逆算の計算機なら、この計算を代わりに行います。
割合どうしを足すことと、数に割合を足すことの違い
数に割合を足すのは、上のように数を拡大縮小する計算です。割合どうしを足すのは別の作業です。10%の増加を二回行うと × 1.1 を二回かけることになり、× 1.21、つまり20%ではなく21%になります。二回目の10%は、増えたあとの金額にかかるからです。異なるグループを表す複数の割合には、平均パーセントの計算機を使います。二つの数の間の変化を求めたいときは、増加率の計算機または減少率の計算機を使います。
ExcelとGoogle Sheetsで割合を足す・引く
A2に数、B2に割合を入れます(セルは割合の形式にするので、15%は0.15として保存されます)。足すなら =A2*(1+B2)、引くなら =A2*(1-B2) と入力します。ほかの数式はExcelのパーセントのガイドで扱っています。
例題:割合を足す・引く
例題1:請求書に消費税を加える
条件
答え
例題2:割引を引く
条件
答え
例題3:昇給を加える
条件
答え
例題4:チップを加える
条件
答え
例題5:数量から12.5%を引く
条件
答え
例題6:続けて二回の変化
条件
答え
倍率の早見表
足す列または引く列の値を掛けます。
| 割合 | 足す(掛ける倍率) | 引く(掛ける倍率) |
|---|---|---|
| 5% | 1.05 | 0.95 |
| 10% | 1.1 | 0.9 |
| 12.5% | 1.125 | 0.875 |
| 15% | 1.15 | 0.85 |
| 20% | 1.2 | 0.8 |
| 25% | 1.25 | 0.75 |
| 50% | 1.5 | 0.5 |
コード:JavaScriptとPythonで割合を足す・引く
どちらの版も上の例(1,299、204、53,820、75.52、420、121、96)を再現し、数値以外の入力を拒否し、二つのモードだけを受け付けます。
JavaScript
function finite(name, v) { if (typeof v !== "number" || !Number.isFinite(v)) throw new TypeError(`${name} must be a finite number`);}function places(decimals) { if (!Number.isInteger(decimals) || decimals < 0 || decimals > 10) throw new RangeError("decimals must be a whole number from 0 to 10"); return decimals;}// mode: "add" or "subtract"export function applyPercent(value, percent, mode = "add", decimals = 2) { finite("value", value); finite("percent", percent); if (mode !== "add" && mode !== "subtract") throw new RangeError('mode must be "add" or "subtract"'); const d = places(decimals); const multiplier = mode === "add" ? 1 + percent / 100 : 1 - percent / 100; const result = value * multiplier; return { result: Number(result.toFixed(d)), change: Number((result - value).toFixed(d)), multiplier: Number(multiplier.toFixed(10)), };}// Two changes in a row, e.g. +10% then +10%export function chainPercent(value, steps, decimals = 2) { finite("value", value); const d = places(decimals); let result = value; for (const [mode, percent] of steps) { finite("percent", percent); if (mode !== "add" && mode !== "subtract") throw new RangeError('mode must be "add" or "subtract"'); result *= mode === "add" ? 1 + percent / 100 : 1 - percent / 100; } return Number(result.toFixed(d));}Python
from decimal import Decimal, ROUND_HALF_UPimport 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 _round(x, decimals): if not isinstance(decimals, int) or isinstance(decimals, bool) or not 0 <= decimals <= 10: raise ValueError("decimals must be a whole number from 0 to 10") return x.quantize(Decimal(1).scaleb(-decimals), rounding=ROUND_HALF_UP)def _factor(mode, percent): if mode not in ("add", "subtract"): raise ValueError('mode must be "add" or "subtract"') p = _num("percent", percent) / 100 return 1 + p if mode == "add" else 1 - pdef apply_percent(value, percent, mode="add", decimals=2): v = _num("value", value) m = _factor(mode, percent) result = v * m return { "result": _round(result, decimals), "change": _round(result - v, decimals), "multiplier": m, }def chain_percent(value, steps, decimals=2): result = _num("value", value) for mode, percent in steps: result *= _factor(mode, percent) return _round(result, decimals)chainPercent(100, [["add", 10], ["add", 10]]) は121を、chainPercent(100, [["add", 20], ["subtract", 20]]) は96を返します。二回の変化の例です。丸めるのは表示のときだけにします。Python版は学校で一般的な四捨五入で丸め、Decimal の値を返すので、1,299は1299.00と表示されます。JavaScriptの toFixed は二進数の値に対して働くため、ちょうど中間になる結果は、学校の規則なら切り上げるところで切り捨てられることがあります。
プライバシーと入力の安全性
- 値の計算はブラウザー内で行われます。入力した数値がサーバーに送られたり、保存されたりすることはありません。
- 入力欄は数値のみ受け付けます。割合には末尾に%記号を付けることもできます。文字、空欄、NaN、Infinityはメッセージを表示して拒否され、入力した内容がコードとして実行されることは一切ありません。
- 負の割合も受け付けられ、向きが逆になります。-10%を足すのは、10%を引くのと同じです。
- 100%より大きい割合を引くと、合計は負の数になります。計算機は入力をブロックせず、短い注記つきで結果を示します。それが正しい計算だからです。
- 小数点以下の桁数は、0から10までの整数に限られます。
- カンマの直後にちょうど3桁が続く場合は千の位の区切りとして読み、1,200 は 1200 になります。それ以外のカンマは小数点として扱うため、12,50 は 12.50 で、0 で始まる 0,500 のような数は小数として読みます。1.234,5 のような混在形式や 1,2,3 のようなあいまいな入力は、推測せずに拒否します。桁区切りの空白(改行されない空白を含む)は無視します。
割合を足す・引くときのよくある間違い
| 間違い | 何が起こるか | 計算機の動作 |
|---|---|---|
| 数の〇%そのものを答えとして報告する | 240の15%は36ですが、240から15%を引くと204です | 新しい合計と金額を別々に示します |
| 割合をそのまま数として足す | 80 + 20は100で、96になりません | 先に倍率に変換します |
| 引くときに倍率を間違える | 80 × 1.2は96で、20%を引いた64にはなりません | 引くときは1から小数を引いた値を使います |
| 同じ割合を足してから引く | 100に+20%、続けて-20%をすると、100ではなく96になります | 変化する基準から倍率をつなげて計算します |
| 10%の増加二回を20%として足す | 10%の増加を続けて二回行うと21%になります | 1.1に1.1を掛けます |
| 表計算の数式で15%ではなく15と入力する | B2が15のとき =A2*(1+B2) は、240に対して276ではなく3,840になります | 割合をパーセントとして受け取ります |
| 倍率を丸める | 1.0825を1.08に短縮すると、1,299ではなく1,296になります | 丸めるのは最終的な合計だけです |
| 負の合計を誤りと見なす | 50から120%を引くと-10になります | 注記つきで表示します |
どの計算が必要ですか?
この五つの作業は似た数を使いますが、必要な公式は異なります。
割合が割引のときは、一行目と三行目は同じ数になります。値札から始めてセール価格を求めたいときは、割引率の計算機を使います。