Calculatrice de prix unitaires
Un pot de 32 onces à 5,99 bat un pot de 16 onces à 3,49 dès qu'on divise chaque prix par sa taille : il revient moins cher à l'once. Saisissez prix et formats dans une même unité et le meilleur rapport est signalé. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Tout se passe dans votre navigateur : gratuit, sans envoi de vos données.
Une calculatrice de comparaison de prix unitaires transforme les prix en rayon et les formats d'emballage en un classement équitable par unité, pour que vous voyiez quel produit revient vraiment le moins cher. Saisissez deux produits ou plus avec un prix total et un format d'emballage dans la même unité — onces, millilitres, grammes ou nombre de pièces — et l'outil renvoie le prix divisé par le format pour chaque ligne, signale le meilleur rapport comme le prix unitaire le plus bas et affiche une arithmétique pas à pas sur laquelle vous pouvez compter dans un devoir, une application de courses ou une feuille de calcul d'achats.
Ce que signifie le prix unitaire quand les emballages diffèrent
Le prix unitaire est le prix total en rayon divisé par la quantité que vous recevez réellement : onces dans un pot, millilitres dans une bouteille, grammes dans un sachet ou pièces dans un lot. Quand la marque A coûte trois dollars quarante-neuf pour seize onces et la marque B cinq dollars quatre-vingt-dix-neuf pour trente-deux onces, comparer les seuls totaux en rayon induit en erreur : un pot est plus petit.
Diviser chaque prix par son format donne un dénominateur commun pour classer le coût réel par once, par millilitre ou par feuille. Le meilleur rapport est le produit au prix unitaire le plus bas, pas forcément l'étiquette la plus basse ni le plus grand emballage. Acheter en gros revient souvent moins cher à l'unité, mais pas toujours : une promotion sur un petit paquet peut battre le format de club de gros, et les lots cachent parfois un tarif unitaire plus élevé que l'unité seule.
Cette calculatrice ne convertit pas les unités à votre place — si un produit est en onces liquides et un autre en litres, convertissez d'abord vers une seule unité — et n'applique ni taxes, ni coupons, ni cotisations d'adhérent, ni remises de fidélité. Elle applique seulement l'arithmétique que vous faites déjà à la main : prix unitaire égal au prix divisé par le format, puis choisir le minimum. Professeurs de mathématiques du consommateur, coachs budgétaires et chefs de produit qui publient des widgets « lequel est le moins cher ?
» ont besoin du même contrat déterministe : mêmes entrées, mêmes prix unitaires, même indicateur de meilleur rapport, dans tout environnement. Les formats nuls et négatifs sont des erreurs dures car la division par zéro est indéfinie et un format d'emballage négatif n'est pas une quantité physique dans ce modèle.
Conseils pratiques, limites et recherches associées
Utilisez la même unité de format pour tous les produits d'un même appel : mélanger onces et millilitres sans convertir ne sera pas corrigé à votre place et produira un classement dépourvu de sens. Préférez envoyer des nombres plutôt que des chaînes formatées en devise ; les chaînes numériques ne sont acceptées que si elles respectent un motif numérique fini strict, sans symboles de dollar ni virgules.
Gardez le price non négatif — les échantillons gratuits à prix zéro sont admis et donnent un prix unitaire nul —, tandis que le size doit rester strictement positif. Cette page cible ceux qui cherchent une calculatrice de comparaison de prix unitaires, un outil de prix par unité ou un vérificateur de meilleur rapport par format d'emballage ; ce n'est ni un moissonneur d'épiceries en direct, ni un convertisseur multidevise, ni un optimiseur de coupons.
Préférez cette capacité quand vous connaissez déjà le prix en rayon et le format d'emballage et qu'il vous faut seulement le prix unitaire plus la sélection du meilleur rapport ; si votre source est une photo de ticket de caisse, extrayez d'abord ces nombres.
Cas d’usage
Vérification du meilleur rapport en rayon
Les acheteurs saisissent deux prix en rayon et formats d'emballage ou plus et achètent l'option au prix unitaire le plus bas plutôt qu'à l'étiquette la plus basse.
Devoirs et fiches de mathématiques du consommateur
Les élèves comparent lots et unités seules et vérifient les prix unitaires écrits à la main et les choix de meilleur rapport contre un résultat déterministe.
Questions fréquentes
Comment le prix unitaire est-il calculé ?
Le meilleur rapport est le produit au prix unitaire le plus bas quand tous les formats utilisent la même unité.
Que se passe-t-il si le format de l'emballage est nul ou négatif ?
Un format nul ou négatif ne peut définir un prix unitaire sensé, donc la requête est rejetée et non facturée.
Combien de produits puis-je comparer ?
Chaque produit exige un prix non négatif et un format strictement positif.
La calculatrice de comparaison de prix unitaires est-elle gratuite ?
L'outil du navigateur est gratuit et s'exécute en local.
Le plus grand format est-il toujours le moins cher ?
Non. Le grand format revient souvent moins cher à l'unité, mais une promotion sur un petit format peut le battre, et certains lots cachent un prix unitaire plus élevé que l'article seul. Seul le prix unitaire tranche.
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/unit-price \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"products":[{"name":"Brand A 16 oz","price":3.49,"size":16},{"name":"Brand B 32 oz","price":5.99,"size":32}]}'const res = await fetch("https://api.kit.forhosting.com/life/unit-price", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"products": [
{
"name": "Brand A 16 oz",
"price": 3.49,
"size": 16
},
{
"name": "Brand B 32 oz",
"price": 5.99,
"size": 32
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/life/unit-price",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"products": [
{
"name": "Brand A 16 oz",
"price": 3.49,
"size": 16
},
{
"name": "Brand B 32 oz",
"price": 5.99,
"size": 32
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/life/unit-price", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"products":[{"name":"Brand A 16 oz","price":3.49,"size":16},{"name":"Brand B 32 oz","price":5.99,"size":32}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"products":[{"name":"Brand A 16 oz","price":3.49,"size":16},{"name":"Brand B 32 oz","price":5.99,"size":32}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/life/unit-price", 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
{
"products": [
{
"name": "Brand A 16 oz",
"price": 3.49,
"size": 16
},
{
"name": "Brand B 32 oz",
"price": 5.99,
"size": 32
}
]
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "life.unit_price",
"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.
Limites
min_products | 2 |
max_products | 50 |
max_abs | 1000000000000 |
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
Les formats nuls ou négatifs sont rejetés avec invalid_input au lieu d'inventer un infini ou une bonne affaire absurde. Le traitement est une arithmétique purement déterministe — sans réseau, sans moissonneur de magasins, sans graine aléatoire, sans dépendance à l'horloge —, de sorte que l'exécuteur gratuit du navigateur et l'API prépayée renvoient le même JSON après l'arrondi décimal fixe à chaque appel.
Comment appeler l'API et ce qu'elle renvoie
Vous pouvez aussi envoyer les tableaux parallèles prices et sizes de même longueur, avec names ou labels facultatifs. Envoyez un corps JSON avec un champ obligatoire : products (alias items, options, list), un tableau d'au moins deux et au plus cinquante objets. Chaque objet exige un price fini non négatif (alias cost, amount) et un size strictement positif (alias quantity, qty, units, package_size). Le name facultatif (alias label, title) étiquette la ligne dans la réponse ; s'il est omis, l'outil utilise Product 1, Product 2, et ainsi de suite. Les valeurs absolues de price et size doivent rester sous un billion pour que les quotients intermédiaires restent finis en double précision IEEE sur le Worker et dans le navigateur. En cas de succès, la réponse fixe count au nombre de produits comparés, products à un tableau d'objets chacun avec index, name, price et size arrondis, unit_price et is_best_value, best_index au premier indice au prix unitaire le plus bas, best_name, best_unit_price, best_price et best_size aux champs de ce gagnant, savings_vs_worst_per_unit à l'écart entre le prix unitaire le plus haut et le plus bas, formula à la chaîne unit_price égal à price sur size, message à un bref résumé en anglais et steps à un tableau ordonné de lignes de substitution. Une validation échouée — products manquant, moins de deux éléments, nombres non finis, valeurs hors des limites absolues ou tout size nul ou négatif — renvoie invalid_input et n'est jamais facturée. Le tarif est un forfait de $0.002 par requête réussie avec article unitaire et prix unitaire marginal nul.
Conseils pratiques, limites et recherches associées
Pour enseigner, associez des exemples : trois virgule quatre neuf pour seize onces contre cinq virgule neuf neuf pour trente-deux onces montre le grand paquet gagnant au prix unitaire ; une promotion qui fait passer le petit paquet sous le tarif unitaire du gros montre le meilleur rapport basculer ; deux produits au prix unitaire identique produisent une égalité documentée avec les deux is_best_value à true et best_index pointant vers le premier ; et un size nul ou négatif démontre le chemin dur d'invalid_input. Les tâches échouées qui renvoient invalid_input ne consomment pas de solde prépayé, ce qui garde les scripts d'exploration bon marché quand les apprenants mettent size à zéro exprès. Les vérifications aller-retour sont faciles : recalculez à la main chaque price divisé par size et confirmez qu'il égale le unit_price publié dans le même arrondi à douze décimales, et confirmez que le produit au unit_price minimal est le seul signalé comme meilleur rapport, sauf égalité réelle.
Cas d'intégration
Tests unitaires d'achats et de catalogue
Les équipes évaluent en lot des paires prix de SKU et format de paquet et vérifient les champs best_index et unit_price dans des tests d'interface de caisse ou de catalogue.
Questions techniques
Et si deux produits ont le même prix unitaire ?
Les deux sont signalés is_best_value à true. best_index pointe vers le premier produit ayant atteint le prix unitaire minimal.