割引率計算機
この割引率計算機で、元の価格と割引から、セール価格と割引額が求まります。割引率の計算、重ねた割引、消費税、50%引き、二つの価格から求める割引率も扱います。
例の値が入力されています。ご自身の値に置き換えてください。
セール価格
90.00
計算過程
- 120 − 25% (30.00) = 90.00
- お得になる金額
- 30.00
上着の値札は$249.99で、15%引きです。実際の支払額はいくらで、いくらお得になるでしょうか。さらに10%のクーポンが使えるなら、25%引きになるのでしょうか、それともそれより少ないのでしょうか。
この割引率計算機に、元の価格と割引率を入力します。セール価格と割引額が表示され、二つ目の割引と消費税も加えられます。逆算もでき、元の価格とセール価格を入れると割引率を求めます。
割引率の仕組み
結論:元の価格に、割引率を100で割った値を掛けて割引額を求め、それを元の価格から引きます。$80の20%引きは、$16お得になり、セール価格は$64です。
割引率の計算方法
割引額 = 元の価格 * 割引率 / 100セール価格 = 元の価格 * (1 - 割引率 / 100)- 割引率を100で割って小数にします(20%は0.20になります)。
- 元の価格を掛けて、割引額を求めます。
- 元の価格から割引額を引いて、セール価格を求めます。
よくある割引の暗算のコツ
10%引きなら、小数点を一桁左に動かして割引額を求め、それを引きます。20%引きなら、その十分の一を二倍にします。15%なら、十分の一に、その半分を足します。25%引きなら価格の四分の一を取り、50%引きなら半分にします。$80なら十分の一が$8なので、20%引きで$16、15%引きで$12お得になります。店先での簡単な確認には暗算を使い、二つ目の割引や税が絡むときは、割引率計算機を使います。
二つの割引を重ねる
二つ目の割引は、元の価格ではなく、すでに引き下げられた価格に適用されるので、二つのパーセントを単純に足すことはできません。残りの割合を掛けます。20%引きのあとに10%引きなら、価格は 0.80 × 0.90 = 0.72 になり、合計で28%引きです。$249.99の上着で、15%引きのあとに10%引きなら、価格は 0.85 × 0.90 = 0.765 になるので、$191.24となり、25%引きではなく23.5%引きです。
割引と消費税
アメリカの多くのレジでは、先に割引があり、セール価格に対して税がかかります。セール価格に税率を掛けて税額を求め、それを足します。どちらの手順も掛け算なので、税を先に計算しても同じ合計になります。地域やクーポンの種類によっては、割引前の価格に税がかかる場合があり、その場合は支払いが高くなるので、店の扱いを確認してください。
二つの価格から割引率を求める
割引率を求めるには、割引額を、セール価格ではなく元の価格で割り、100を掛けます。割引率の公式は(元の価格 − セール価格) ÷ 元の価格 × 100です。$60の商品が$45でセール中なら、25%引きです。上の割引率計算機の二つの価格モードで、この計算ができます。
元の価格を求める
セール価格と割引率しか分からないときは、セール価格を (1 − 割引率 ÷ 100) で割ります。20%引きのあとのセール価格が$64なら、元の価格は 64 ÷ 0.80 = $80 です。逆算計算機なら、一度の操作で求められます。
割引率の例題
$80の商品に対する、よくある割引率:
| 割引率 | 割引額 | セール価格 |
|---|---|---|
| 10% | $8.00 | $72.00 |
| 15% | $12.00 | $68.00 |
| 20% | $16.00 | $64.00 |
| 25% | $20.00 | $60.00 |
| 30% | $24.00 | $56.00 |
| 50% | $40.00 | $40.00 |
例題1:$80の20%引き
条件
手順 1
0.20 × 80 = 16。
答え
例題2:$249.99の15%引き(端数処理あり)
条件
手順 1
0.15 × 249.99 = 37.4985で、$37.50の割引額に丸められます。
答え
例題3:$100の20%引き、さらに10%引き
条件
手順 1
最初の割引のあと、価格は$80です。
答え
例題4:$120の25%引きに8%の消費税
条件
手順 1
25%引きで$90になります。
答え
例題5:二つの価格から割引率を求める
条件
手順 1
割引額は$15で、15 ÷ 60 = 0.25です。
答え
割引率のコード
どちらの版も上の例($64.00、$212.49、$72.00、税込みで$97.20)を再現し、0から100の範囲外の割引率は拒否します。
JavaScript
const round2 = (x) => Math.round((x + Number.EPSILON) * 100) / 100;function check(name, v, max = Infinity) { if (typeof v !== "number" || !Number.isFinite(v)) throw new TypeError(`${name} must be a finite number`); if (v < 0 || v > max) throw new RangeError(`${name} must be between 0 and ${max}`);}export function percentOff(price, percentOff, { secondPercentOff = 0, taxPercent = 0 } = {}) { check("price", price); check("percentOff", percentOff, 100); check("secondPercentOff", secondPercentOff, 100); check("taxPercent", taxPercent, 100); const salePrice = price * (1 - percentOff / 100) * (1 - secondPercentOff / 100); const tax = salePrice * (taxPercent / 100); return { salePrice: round2(salePrice), saved: round2(price - salePrice), tax: round2(tax), total: round2(salePrice + tax), };}export function discountFromPrices(original, sale) { check("original", original); check("sale", sale); if (original === 0) throw new RangeError("original must be greater than 0"); if (sale > original) throw new RangeError("sale must not exceed original"); return ((original - sale) / original) * 100;}Python
from decimal import Decimal, ROUND_HALF_UPimport mathCENT = Decimal("0.01")def _num(name, v, hi=None): 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") v = Decimal(str(v)) if v < 0 or (hi is not None and v > hi): raise ValueError(f"{name} is out of range") return vdef percent_off(price, percent_off, second_percent_off=0, tax_percent=0): price = _num("price", price) p1 = _num("percent_off", percent_off, 100) p2 = _num("second_percent_off", second_percent_off, 100) tax_p = _num("tax_percent", tax_percent, 100) sale = price * (1 - p1 / 100) * (1 - p2 / 100) tax = sale * tax_p / 100 q = lambda x: x.quantize(CENT, rounding=ROUND_HALF_UP) return {"sale_price": q(sale), "saved": q(price - sale), "tax": q(tax), "total": q(sale + tax)}金額には、Pythonでは Decimal を、またはセント単位の整数を使ってください。二進数の浮動小数点数では、半セントが間違った側に丸められることがあります。
プライバシーと入力の安全性
価格の計算はお使いのブラウザ内で行われます。入力した数はサーバーに送信されず、保存もされません。
- 0未満または100を超える割引率は拒否されます。負の割引は値上げであり、100%を超える割引は価格が負になるからです。
- カンマの直後にちょうど3桁が続く場合は千の位の区切りとして読み、1,200 は 1200 になります。それ以外のカンマは小数点として扱うため、12,50 は 12.50 で、0 で始まる 0,500 のような数は小数として読みます。1.234,5 のような混在形式や 1,2,3 のようなあいまいな入力は、推測せずに拒否します。桁区切りの空白(改行されない空白を含む)は無視します。
割引率でよくある間違い
| 間違い | 何が起こるか | 計算機の動作 |
|---|---|---|
| 重ねがけの割引を足す | $100の20%引きのあとに10%引きは、30%引き($70)ではなく、正しい価格は$72 | 残りの割合を掛け、合わせた割引率を示します |
| セール価格で割って割引率を求める | $15 ÷ $45では、25%ではなく33.3%になる | 常に元の価格で割ります |
| パーセントをドルとして扱う | $80の20%引きを 80 − 20 = $60 と読み、$64にならない | パーセントを価格に対する割合に変換します |
| ステップごとに丸める | 最後の一セントがずれる | 丸めるのは最終的な金額だけです |
| 元の価格に税をかける | 例題4で、合計が$97.20ではなく$99.60になる | 税はセール価格にかけ、そのことを明記します |
| 割引率が100を超える、または0未満 | 価格が負になる、または値上がりになる | メッセージを表示して値を拒否します |
| 「2個買うと1個無料」を50%引きと読む | 3個のうち2個分を支払うので、それぞれの商品が33.3%引きになる | 割引率として33.33を入力する |
割引率、割引、値下げ、マークアップの違い
割引率と値下げは、同じ値引きを表します。減少率の計算機と増加率の計算機は、価格に限らずあらゆる値について、その二つの行を扱います。マークアップは販売者の原価を基準とするので、50%のマークアップは、50%のマージンや50%の割引と同じではありません。