Cela semble être une question facile, je sais. Je suis littéralement perplexe.
Voici deux sites Web qui ont fait la calculatrice simple:
J'ai besoin de calculer ces frais Paypal dans mon application PHP.
Voici ce que j'ai eu, disons que nous voulions être payés 30 $ "même" pour les frais d'adhésion. C'est la fonction que j'utilise pour calculer ce que nous devrions facturer pour la compenser à l'aide des calculs de Paypal (également décrits sur les deux sites ci-dessus): 2,9% de la transaction + 0,30 $.
function memfees()
{
$calc = round((30 * .029) + 30 + .30,2);
return $calc;
}
Testez-le ici: http://matt.mw/junk/php/memfees.php Comme vous pouvez le voir, il est écrit 31.17. Les deux autres sites Web disent qu'il devrait être 31.20. Si j'essaye 130,00 $, le mien calcule à 134,07 $ et les deux leurs calculent à 134,19 $.
Qu'est-ce que je fais mal?
Pourquoi est-ce que j'utilise une fonction Round? Les pourcentages font que certaines décimales dépassent les centièmes et Paypal génère une erreur s’il ya plus de 2 chiffres après la décimale. Je pensais que les gens arrondissaient normalement l'argent (par exemple, 31,6342 dollars équivaudrait à 31,63 dollars), mais si c'est le cas, qu'est-ce que je fais de mal dans l'exercice de mes fonctions? Le montant qui est hors service est encore plus important si les paiements sont importants. Cela me porte à croire que quelque chose ne va pas avec la portion en pourcentage.
Pourriez-vous offrir de l'aide à ce sujet?
Merci pour votre temps.
Votre fonction semble étrange. Pour le décomposer, Paypal applique un taux fixe de 0,30 $ et ajoute des frais de transaction de 2,9%.
La formule consiste à ajouter 0,30 $ puis à diviser par la différence en pourcentage (100% - 2,9%), ce qui vous donnera le montant avant réduction effective par Paypal.
function memfees($amount)
{
$amount += .30;
return $amount / (1 - .029);
}
Vous pouvez arrondir et flotter à votre guise.
Parce que vous y réfléchissez mal.
Vous ne facturez pas 30 $, vous facturez 31,20 $. Paypal déduit les frais de transaction (2,9%) de que puis prélève 0,30 $ sur le résultat:
$31.20
* 0.971 (1 - 2.9%)
------
$30.2952
- $00.30
------
$29.9952
Donc, vous devez inverser ce processus, c’est-à-dire ajouter 0,3 € à votre total et diviser par 0,971.
Voici une bonne explication mathématique de la façon dont cela fonctionne. Nous avons ce numéro, x, que nous voulons charger une carte de crédit. Nous ne savons pas quel est ce nombre, mais nous savons que lorsque nous soustrayons 30 cents et soustrayons 2,9% de x, nous obtenons y, qui correspond au montant que nous rapportons à la maison:
y = x - x * .029 - .3
Nous le savons car nous savons quel montant nous voulons ramener à la maison. Disons que nous voulions gagner 100 $, puis y = 100. Mais qu'est-ce que x?
y = x - x * .029 - .3
y + .3 = x - x * .029
= x(1 - .029)
(y + .3) / (1 - .029) = x
x = (y + .3) / .971
Remarque: étant donné que x - x * .029
peut être écrit en tant que x * 1 - x * .029
, tout ce que vous avez à faire est simplement d'utiliser la propriété distributive et nous obtenons x(1 - .029)
Nous trouvons donc la formule:
x = (y + .3) / .971
Ce qui définit ce nombre infâme, x. En outre, cela répond à notre question. Quel montant devrais-je débiter d'une carte afin de couvrir les frais de transaction et ne pas être inférieur au montant que nous voulons rapporter à la maison? Eh bien, tout ce que nous avons à faire est de remplir le montant de la maison, qui est y:
x = (100 + .3) / .971
x = ~103.30
J'espère que cela aide à clarifier.
En 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);
}
Un problème de maths. 100% n'est pas ce que vous pensez:
97,1 % payout ($ 30) + 2,9 % fee
par exemple.:
97.10 % = $ 30
1.00 % = $ 30 / 97.1
100.00 % = $ 30 / 97.1 * 100
============================
100.00 % ~ 30,90
Maintenant, nous devons ajouter les frais fixes:
$ 30,90 + $ 0.30
Ce qui a pour résultat le $ 31.20
demandé
Alors qu'est-ce que cela signifie dans le code?
//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);
}