@zenuinebit/unit-price
v0.1.0
Published
Shelf-style unit prices (per 100 g, per litre...) and offer comparison.
Readme
@zenuinebit/unit-price
Shelf-label unit prices ("45.00 per 100 g") and a fair comparison of different pack sizes. Prices are integers in minor units (see @zenuinebit/money).
import { unitPrice, compare } from "@zenuinebit/unit-price";
unitPrice({ price: 4500, quantity: 250, unit: "g" });
// { amount: 1800, exact: 1800, per: { quantity: 100, unit: "g" } } -> 18.00 per 100 g
unitPrice({ price: 900, quantity: 330, unit: "ml", count: 6 }); // 6 x 330 ml pack -> 45 per 100 ml
unitPrice({ price: 4500, quantity: 250, unit: "g" }, { quantity: 1, unit: "kg" }); // 18000 per kg
compare([
{ label: "250 g", price: 4500, quantity: 250, unit: "g" },
{ label: "500 g", price: 8000, quantity: 500, unit: "g" },
{ label: "1 kg", price: 15000, quantity: 1, unit: "kg" },
]);
// cheapest first, each with unitPrice, savingPercent (vs the dearest) and cheapest: true/falseUnits: mass mg g kg oz lb, volume ml cl l floz (US fluid ounce), length mm cm m, count each dozen. Defaults follow shelf labels: 100 g, 100 ml, 1 m, 1 each.
Good to know
- Offers must measure the same kind of thing; comparing grams with millilitres throws instead of guessing a density.
amountis rounded to a minor unit for display. Useexactto rank offers that round to the same amount (comparedoes).- Not included: tax rules for what a unit price must show, and local legal formats. Check them for your market.
