簡単な質問のように聞こえます、私は知っています。私は文字通り困惑しています。
シンプルな計算機を作成した2つのWebサイトは次のとおりです。
PHPアプリケーションで、これらのPaypalの料金を計算する必要があります。
これが私が得たものです。たとえば、会費として「偶数」で30ドルの支払いを望んでいたとします。これは、Paypalの計算(上記の両方のサイトでも説明されています)を使用して、それを補うために請求する必要があるものを計算するために使用している関数です:トランザクションの2.9%+ $ 0.30。
function memfees()
{
$calc = round((30 * .029) + 30 + .30,2);
return $calc;
}
ここでテストしてください: http://matt.mw/junk/php/memfees.php ご覧のとおり、31.17と表示されています。他の両方のウェブサイトはそれが31.20であるべきだと言っています。 $ 130.00を試してみると、私の計算では$ 134.07、両方とも$ 134.19です。
何が悪いのですか?
Round関数を使用するのはなぜですか?パーセンテージを使用すると、小数点以下の桁が100分の1を超えてしまい、小数点以下2桁を超えると、Paypalはエラーを生成します。私は人々が通常お金を丸めると思っていました(例えば、$ 31.6342は$ 31.63になります)が、その場合、私は自分の機能で何が間違っているのですか?大きな支払いがある場合、オフになる金額はさらに大きくなります。これにより、割合の部分で何かが間違っていると信じるようになります。
これについていくつかの助けを提供できますか?
お時間をいただきありがとうございます。
あなたの機能は奇妙に思えます。それを分解するために、Paypalは$ .30の固定料金を請求し、2.9%の取引パーセンテージ料金を追加します。
この計算式は、$。30を加算してから、パーセンテージの差(100%-2.9%)で割ることです。これにより、Paypalによる実際の削減前の金額が得られます。
function memfees($amount)
{
$amount += .30;
return $amount / (1 - .029);
}
好きなように丸めて浮かせることができます。
あなたはそれについて間違った方法で考えているからです。
あなたは$ 30を請求しません、あなたは$ 31.20を請求します。 Paypalはthatから取引手数料(2.9%)を差し引き、結果から$ 0.30を受け取ります。
$31.20
* 0.971 (1 - 2.9%)
------
$30.2952
- $00.30
------
$29.9952
したがって、このプロセスを逆にする必要があります。つまり、合計に$ 0.3を追加し、0.971で割ります。
これがどのように機能するかについての良い数学的説明があります。この番号xがあり、クレジットカードに請求します。この数値が何であるかはわかりませんが、30セントを引いてxの2.9%を引くと、yが得られます。これは、家に持ち帰る金額です。
_y = x - x * .029 - .3
_
家に持ち帰りたい金額がわかっているので、私たちはyを知っています。たとえば、100ドル、次にy = 100を持ち帰りたいとしましょう。しかし、xは何ですか?
_y = x - x * .029 - .3
y + .3 = x - x * .029
= x(1 - .029)
(y + .3) / (1 - .029) = x
x = (y + .3) / .971
_
注:_x - x * .029
_は_x * 1 - x * .029
_として記述できるため、必要なことは、分散プロパティを使用することだけであり、x(1 - .029)
だから私たちは式を思い付く:
_x = (y + .3) / .971
_
これは、この悪名高い数xを定義します。また、それは私たちの質問に答えます。取引手数料をカバーし、持ち帰りたい金額を下回らないようにするには、カードにいくら請求する必要がありますか?まあ、私たちがする必要があるのは、持ち帰りの量を入力することです、それはyです:
_x = (100 + .3) / .971
x = ~103.30
_
これが明確になることを願っています。
C#では
public decimal CalcFee()
{
//Paypal Percentage Fee = 0.29%, Fix Fee = 0.3
var sum = this.Items.Sum(c => c.Price * c.Qty); //Total Items
return Math.Round(Math.Round((sum + (decimal)0.3) / (decimal)0.971, 2) - sum, 2);
}
数学の問題。 100%はあなたが考えるものではありません:
97,1 % payout ($ 30) + 2,9 % fee
例えば。:
97.10 % = $ 30
1.00 % = $ 30 / 97.1
100.00 % = $ 30 / 97.1 * 100
============================
100.00 % ~ 30,90
次に、固定料金を追加する必要があります。
$ 30,90 + $ 0.30
リクエストされた$ 31.20
では、これはコードで何を意味するのでしょうか?
//untested, not a php developer anymore
function requiredChargement($requiredPrice)
{
$requiredPercentage = 100.0 - 2.9;
$fullVariableCost = $requiredPrice / requiredPercentage * 100.0;
return round($fullVariableCost + 0.3, 2);
}