toPrice
Format and round price values with configurable precision.
Import
import { toPrice } from "@evershop/evershop/checkout/services";
Syntax
toPrice(value: string, forDisplay?: boolean): number | string
Parameters
value
Type: string
Price value to format.
forDisplay
Type: boolean (optional, default: false)
Whether to format for display with currency symbol.
Return Value
Returns number if forDisplay = false, or formatted string if forDisplay = true.
Examples
Basic Rounding
import { toPrice } from "@evershop/evershop/checkout/services";
const price = toPrice("19.999");
console.log(price); // 20 (number, rounded per the store's pricing settings)
toPrice throws an Error if the value cannot be parsed as a number. Always ensure the input is a valid numeric string.
Format for Display
import { toPrice } from "@evershop/evershop/checkout/services";
const formatted = toPrice("49.99", true);
console.log(formatted); // "$49.99" (depends on the store currency setting and shop.language)
Calculate Total
import { toPrice } from "@evershop/evershop/checkout/services";
const itemPrice = toPrice("29.99");
const tax = toPrice("2.4");
const total = toPrice((itemPrice + tax).toString());
console.log(total); // 32.39
Display in Template
import { toPrice } from "@evershop/evershop/checkout/services";
const product = {
price: "149.95"
};
const displayPrice = toPrice(product.price, true);
// Returns: "$149.95" or "€149,95" depending on the store currency and language
Rounding and precision
Both come from the admin Tax settings first, with the legacy config as a fallback:
| Value | Admin setting | Config fallback | Default |
|---|---|---|---|
| Rounding mode | pricingRounding | pricing.rounding | round |
| Decimal precision | pricingPrecision | pricing.precision | 2 |
Accepted rounding modes are 'round' (nearest, default), 'ceil' (always up) and 'floor' (always down). 'up' and 'down' are still accepted as backward-compatible aliases for 'ceil' and 'floor'.
Both lookups are synchronous and read the warmed settings cache, so toPrice is safe in hot paths (cart build, promotion calculators) with no per-call DB round trip.
Currency Format
When forDisplay = true, the value is formatted with Intl.NumberFormat:
- Currency comes from
getStoreCurrency()— the admin settingstoreCurrency, falling back to the legacyshop.currencyconfig, thenUSD. Theshop.currencykey was removed from the typed configuration structure; it survives only as an untyped legacy fallback. - Locale comes from the
shop.languageconfig (e.g.en,de).
An existing cart or order carries its own persisted currency — getStoreCurrency() is only the default for new carts and the display fallback when no currency is in context.
See Also
- getSetting - Read an admin setting
- getConfig - Get configuration