Calculateur de remise 1+1
Pour cinq articles en offre « un acheté, un offert », vous en payez trois, deux sont offerts et la remise réelle est de 40 %. Indiquez le prix unitaire, la quantité et les chiffres de l'offre pour voir la remise et le total à payer. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Exemple résolu
- Prix unitaire
- 10
- Quantité
- 5
- Qté à payer
- 1
- Qté offerte
- 1
- Taille du groupe
- 2
- Cycles d’offre
- 2
- Reste
- 1
- Articles payés
- 3
Les promotions de détail telles que un acheté un offert, deux achetés un offert et d’autres autocollants achetez-X-obtenez-Y-gratuits paraissent simples en rayon et deviennent floues en caisse lorsque la quantité du panier n’est pas un multiple propre du cycle d’offre. Les acheteurs veulent un seul chiffre honnête : quel pourcentage de remise effectif j’obtiens vraiment, et quel est le total à payer après application des articles offerts. Ce calculateur prend un prix catalogue unitaire, une quantité de caisse et le X et Y d’une offre achetez-X-obtenez-Y-gratuits, compte combien d’articles sont offerts versus payés sous le modèle classique de cycles, et renvoie total catalogue, total à payer, économie et le pourcentage de remise effectif. Les quantités non positives sont rejetées avec une erreur de validation claire pour que des paniers absurdes ne deviennent pas de fausses remises.
Comment le pourcentage de remise achetez-X-obtenez-Y est calculé
Partez d’un seul prix catalogue unitaire exprimé dans une unité monétaire. Ensuite choisissez quantity, le nombre de ces articles identiques que vous amenez en caisse, qui doit être un entier positif car la caisse compte des unités entières. Le classique un acheté un offert est X égal à un et Y égal à un ; deux achetés un offert est X égal à deux et Y égal à un.
La taille du groupe d’offre est X plus Y. Les cycles d’offre complets égalent l’entier floor de quantity divisé par la taille de groupe, et le reste est quantity modulo taille de groupe. Les articles offerts égalent les cycles complets fois Y plus le reste offert max de zéro et reste moins X : vous payez encore les X premiers articles d’un groupe incomplet, et seuls les articles au-delà de X dans ce reste deviennent offerts, jusqu’à Y par cycle complet.
Les articles payés égalent quantity moins articles offerts. Le pourcentage de remise effectif est cent fois économie divisé par total catalogue lorsque le total catalogue est positif, et zéro lorsque le total catalogue est zéro pour que des biens catalogue gratuits n’inventent pas Infinity.
La capacité n’empile pas de coupons, n’applique pas de taxe de vente, ne modélise pas de paniers multi-SKU mixtes où la règle du moins cher offert compte, ni ne convertit les devises ; ce sont des intentions produit séparées avec leurs propres pages lorsque la couverture s’élargit.
Où les calculateurs BOGO apparaissent dans le travail réel
Les acheteurs d’épicerie et d’habillement comparent sans cesse les autocollants un acheté un offert aux soldes en pourcentage et ont besoin d’un pourcentage de remise effectif qui tienne compte du fait que la taille du panier ne tombe pas sur un multiple propre du cycle d’offre. Marchands et opérateurs e-commerce construisant des pages promotion veulent un total à payer transparent pour que les économies annoncées correspondent à la caisse et que les retours ne flambent pas à cause de règles d’articles offerts mal comprises.
Journalisme et sites de comparaison qui notent les offres hebdomadaires de supermarché convertissent les promotions de rayon en un seul chiffre de pourcentage de remise pour que les lecteurs classent les offres équitablement. Si vous avez ensuite besoin de paniers multi-SKU du moins cher offert, de moteurs de coupons empilés, de totaux TTC ou de conversion multi-devises, traitez-les comme des intentions de recherche et des pages séparées plutôt que de surcharger cette page de calculateur de remise un acheté un offert.
Cas d’usage
1+1 en rayon vs soldes en pourcentage
Convertissez les autocollants achetez-X-obtenez-Y en un pourcentage de remise effectif pour une quantité réelle de panier afin de comparer aux promotions en pourcentage fixe.
Contrôles d’honnêteté des pages promotion
Calculez totaux à payer et comptes d’articles offerts pour des offres BOGO annoncées afin que les landings marchandes correspondent à l’arithmétique de caisse.
Questions fréquentes
Comment fonctionne le comptage des articles offerts achetez-X-obtenez-Y ?
Chaque groupe complet de X+Y articles accorde Y offerts. Pour le reste r, les extras offerts égalent max(0, r − X). Les articles payés égalent quantity moins articles offerts.
Qu’est-ce que le pourcentage de remise effectif ?
C’est le vrai pourcentage sur catalogue après articles offerts, pas une allégation nominale de rayon.
Gère-t-il des prix mixtes ou des paniers multi-SKU ?
Les règles multi-SKU « le moins cher offert » et les coupons empilés sont hors périmètre de ce calculateur.
Pourquoi la remise n'est-elle pas de moitié sur cinq articles ?
Parce que le cinquième article ouvre un nouveau groupe qui ne se complète jamais, et dans un groupe incomplet vous payez d'abord les articles à acheter. Vous payez donc trois articles sur cinq, soit une remise réelle de 40 %.
Les coupons et les taxes sont-ils pris en compte ?
Non. Le calcul ne cumule pas les coupons, n'ajoute pas de taxe et ne convertit pas les devises. Il part d'un seul prix unitaire pour des articles identiques et montre la remise due à l'offre seule.
Outils associés
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/life/bogo-discount \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"unit_price":10,"quantity":5,"buy_qty":1,"free_qty":1}'const res = await fetch("https://api.kit.forhosting.com/life/bogo-discount", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"unit_price": 10,
"quantity": 5,
"buy_qty": 1,
"free_qty": 1
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/life/bogo-discount",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"unit_price": 10,
"quantity": 5,
"buy_qty": 1,
"free_qty": 1
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/life/bogo-discount", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"unit_price":10,"quantity":5,"buy_qty":1,"free_qty":1}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"unit_price":10,"quantity":5,"buy_qty":1,"free_qty":1}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/life/bogo-discount", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"unit_price": 10,
"quantity": 5,
"buy_qty": 1,
"free_qty": 1
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "life.bogo_discount",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |
Notes techniques
Comment le pourcentage de remise achetez-X-obtenez-Y est calculé
Ce chiffre est unit_price : le prix rayon d’un article identique avant la promotion, gardé dans une unité pour tout le calcul afin qu’aucune conversion monétaire silencieuse ne s’introduise. Puis fixez buy_qty à X et free_qty à Y pour le libellé d’offre achetez X obtenez Y gratuits. Le total catalogue est unit_price fois quantity ; le total à payer est unit_price fois articles payés ; l’économie est total catalogue moins total à payer. Le pipeline est de l’arithmétique flottante déterministe : pas de graines aléatoires, pas d’horodatages d’horloge, pas d’appels réseau et pas de dérive de modèle, de sorte que des entrées identiques produisent toujours le même JSON. quantity, buy_qty et free_qty doivent être des entiers positifs finis ; des quantités nulles ou négatives échouent avec invalid_input au lieu d’inventer une remise. unit_price négatif échoue ; unit_price zéro est autorisé et produit des totaux zéro et un pourcentage de remise zéro.
Ce que vous envoyez et ce qui revient
Contrôles classiques : prix unitaire dix avec quantité cinq sous un acheté un offert : articles offerts deux, payés trois, catalogue cinquante, à payer trente, économie vingt, remise quarante pour cent. Autre : prix unitaire douze avec quantité sept sous deux achetés un offert : articles offerts deux, payés cinq, catalogue quatre-vingt-quatre, à payer soixante, économie vingt-quatre, remise environ vingt-huit virgule cinq sept. Envoyez quatre champs obligatoires. unit_price est un nombre fini supérieur ou égal à zéro pour le prix catalogue d’un article. quantity est un entier positif pour combien d’articles vous prenez. buy_qty est un entier positif X du côté payé du cycle d’offre. free_qty est un entier positif Y d’articles offerts après chaque bloc payé complet de X. Champs manquants, chaînes non numériques, NaN, Infinity, champs de quantité fractionnaires, quantités nulles ou négatives et unit_price négatif échouent avec invalid_input et ne sont pas facturés. En cas de succès la réponse renvoie unit_price, quantity, buy_qty et free_qty nettoyés, indique group_size comme X plus Y, deal_cycles comme groupes complets, remainder comme articles restants, paid_items et free_items comme la répartition de caisse, list_total et payable_total et savings comme montants dans la même unité, et discount_percent comme le pourcentage effectif sur le total catalogue. deal_label est une courte chaîne humaine telle que achetez 1 obtenez 1 gratuit, method est bogo_discount, et formula documente free_items égal à floor de quantity sur X plus Y fois Y plus max de zéro et remainder moins X pour que blogs et lettres d’offre citent la même expression. Une requête de quantité nulle ou négative échoue avec invalid_input dur mentionnant des quantités non positives. Le tarif des appels API réussis est la base publiée de $0.002 par élément ; les échecs de validation ne consomment pas le solde prépayé.
Où les calculateurs BOGO apparaissent dans le travail réel
Les éducateurs en finance personnelle qui enseignent les maths du consommateur assignent des fiches BOGO et ont besoin de JSON déterministe pour auto-correcteurs plutôt que de totaux manuscrits qui dérivent au arrondi. Les équipes produit livrant des widgets de panier réutilisent la même arithmétique de cycle dans le navigateur et l’API pour que maquettes hors ligne et production ne divergent jamais. Comme cette capacité est un moteur parse pur, le tarif API est la base publiée de $0.002 par élément réussi et la validation échouée ne consomme pas le solde.
Cas d'intégration
Fixtures de maths du consommateur et auto-correcteurs
Produisez en masse des totaux catalogue vs à payer pour des problèmes BOGO de classe et rejetez les quantités non positives avec invalid_input dur.
Questions techniques
Quelles entrées sont rejetées ?
quantity, buy_qty ou free_qty non positifs ou non entiers ; unit_price négatif ; champs manquants ; NaN ou Infinity. Ils échouent avec invalid_input et ne sont pas facturés.
Combien cela coûte-t-il ?
L’outil navigateur est gratuit et s’exécute localement. Les requêtes API utilisent le solde KIT prépayé à $0.002 par élément réussi ; une entrée invalide n’est pas facturée.