セール用割引計算でNGを貰わない方法

楽天市場恒例の割引出品で計算が合わず苦戦
2018年8月31時点、楽天市場では3か月に1度スーパーセールを開催しています。このスーパーセール、店舗側で10%以上の割引を施し申請をした場合に限りスーパーセールサーチに載せるという強引な割引誘導作戦が敷かれています。
今回、自作中のシステムにてスーパーセール用の価格変更を実装し実験運用してみました。
600件近くが価格条件で10%OFFに満たず 『アウト!』とのチェック結果となっていました。
これは計算方法に問題あるのだろうと式を確認し実際の数で実験をしたので備忘録として残します。
プログラムで指示した式
プログラムで指示した式は次の通り。
1 2 3 4 5 6 7 |
/* 変数の確認 * $sales_price = 販売価格 * $discount = 割引率(倍率:10%OFFは 0.9と登録) * $new_price = 割引率適用後の販売価格 */ $new_price = floor($sales_price - ($sales_price * (1 - $discount))); |
実際の数字を当てはめて表記してみると次のようになる。※売価100円で計算
割引後の価格 = (100 – (100 × (1 – 0.9))) ⇒ = 90
わざわざ (100 × (1 – 0.9)) なんて回りくどい方法を取っているのは、前回も同じく「割引率10%に満たないからダメ!」とはねられたからだ。ちなみに前回は一番簡単な式 100 × 0.9 で計算させている。
前回の反省を踏まえ、原因は【消費税の端数】であろうと推測。floor関数で端数切捨てすればOKだろうと高をくくっていたが失敗は繰り返されてしまった。
切上げ切捨て四捨五入の関数についてはこちら
「だったら徹底的に失敗を追及してやる!」と言うことでやってみた。
どのような時に端数が狂うか実証実験
どのような時に端数が狂うのか実証実験をしてみた。まずは基礎データ、今回は実験結果で差の出た101円と109円(税別)を指定。
No | 売価 | 割引率 | 消費税 | 税別時 10%OFF | 税込時 10%OFF | 税込 四捨五入 |
---|---|---|---|---|---|---|
1 | 101円 | 10%OFF | 8% | 90.9円 | 98.172円 | 98円 |
2 | 109円 | 10%OFF | 8% | 98.1円 | 105.948円 | 106円 |
この時点でもわかるとおり、単純に【10%OFF】をしても楽天側で行う四捨五入が邪魔をして10%OFFならない事があるとわかる。落選する事があるのは、楽天市場では税込み額が10%OFFになっているか検証していると言う事なのでしょう。
切上げ切捨ての端数奇術である事は理解をしているので、どのタイミングで切り捨て計算をすれば目的の値に達するのかを探っていきます。
税別10%OFF価格を切り捨てし消費税を積算してみる
101円の場合、上記表から税別10%OFF価格は90.9円、これを切捨てするので 90円。
109円の場合、上記表から税別10%OFF価格は98.1円、これを切捨てするので 98円。
90×1.08 = 97.2 ⇒ 四捨五入 97円
98×1.08 = 105.84 ⇒ 四捨五入 106円
残念ながら上記表の【税込み額Ver小数点あり】と比べると109円売価で高くなる結果となった。
税込10%OFF価格を四捨五入し、税抜き売価を切捨て算出してみる
101円の場合、上記表から初期値は 98円。
109円の場合、上記表から 106円。
98÷1.08 = 90.74074 ⇒ 切捨て 90円
106÷1.08 = 98.14815 ⇒ 切捨て 98円
ココまではいい感じ。税抜き売価で比較すれば十分10%OFF以下になっている。では、算出結果から再度税込み額を四捨五入計算してみる。
90×1.08 = 97.2 ⇒ 四捨五入 97円
98×1.08 = 105.84 ⇒ 四捨五入 106円
残念。結局同じところをぐるっと回っただけでした。
税別11%OFFして四捨五入、消費税を掛けて四捨五入
101円の 11%OFF は 101×0.89 = 89.89 ⇒ 四捨五入 90
109円の 11%OFF は 109×0.89 = 97.01 ⇒ 四捨五入 97
消費税分を積算して四捨五入する
90×1.08 = 97.2 ⇒ 97円
97×1.08 = 104.76 ⇒ 105円
共に10%OFFにする事が出来た。
まとめ
楽天市場の割引額評価は四捨五入をしていない消費税込み価格を参照していると推測できる。その為、最も簡単な方法は店舗全体を消費税込み価格提示としてしまう事だろう。
ただ、卸業者からくる見積もり表は税別額で記載されている事が多い。データをそのまま使う方が手間と間違い発生率を軽減することが出来る。
税抜き額で出品している場合、スーパーセールで跳ねられない為には(余計な割引にはなるが)11%OFF で計算をする必要がありそうだ。
-
前の記事
ツール備忘録:IDE NetBeans サイドナビ復活 2018.08.31
-
次の記事
PHP:数字の 切上げ/切捨て/四捨五入 の端数処理 2018.09.01
コメントを残す