---
title: Price rules and rounding
slug: price-adjustment-rules
description: How price rules work in Personizely price tests: Set, Increase and Decrease, amounts vs percentages, the five rounding options, and product vs variant rules.
image: https://archbee-image-uploads.s3.amazonaws.com/1y1Fr-DMGy_apx7FwibyA/ORDTWfNKMXiY3ZRv0QSgP_personizely-docs-og.png
docTags: 
createdAt: 2026-10-16T19:42:02.470Z
---

Price rules define what each variation of a Shopify [price test](https://docs.personizely.net/product-price-shopify) charges. For every product in a variation, you set a rule for the price and optionally the compare-at price, either for all variants at once or for individual variants. A rule sets a new price, or increases or decreases the original by an amount or a percentage, with optional rounding.

**Available on:** Shopify.

## How a rule is calculated

1. **Start from the original.** The original is the variant's current price (or compare-at price) in Shopify, in the visitor's currency. A compare-at rule on a variant that has no compare-at price starts from its price.
2. **Apply the action.**
   - **Set** to a value: the new price is the value you enter.
   - **Increase** by an amount or percentage: original + amount, or original × (1 + %).
   - **Decrease** by an amount or percentage: original − amount, or original × (1 − %).
3. **Round** the result with the rounding option you chose. Rounding doesn't apply to **Set**.
4. **Never below zero.** A result below zero becomes zero.

### Fixed amounts and currencies

Amounts (and **Set** values) are entered in your store's base currency. For visitors shopping in another currency, they're converted to that currency with Shopify's exchange rate. Percentages apply to the price in the visitor's currency, so they also work with market-specific prices. On the storefront and with [cart transform](https://docs.personizely.net/cart-transform), rounding is applied after conversion, so **round with .99** gives prices ending in .99 in the visitor's currency. With [duplicate products](https://docs.personizely.net/duplicate-products-clones), the duplicate's price is calculated and rounded in your base currency, and Shopify converts it for other markets using your market's own rounding. If you sell in several currencies, check foreign-currency prices in the cart as part of the [QA checklist](https://docs.personizely.net/qa-checklist).

## Rule options

| Option   | What it does                                                                                                  | Values / default                                                                  |
| -------- | ------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- |
| Action   | How the price changes                                                                                         | **Set** (default), **Increase**, **Decrease**                                     |
| Value    | The new price, amount or percentage                                                                           | At least 0.1                                                                      |
| Method   | Whether the value is an amount or a percentage; click the currency/% button to switch. Not shown for **Set**. | Store currency (default) or %                                                     |
| Rounding | How the result is rounded. Not shown for **Set**.                                                             | don't round (default), round, round with .99, round upward, round upward with .99 |

Limits:

- **Decrease** by a percentage can be at most 99%.
- **Decrease** by an amount can be at most the variant's price minus 1 (for a product-level rule, the cheapest variant's price minus 1).

When you choose a rounding option, the dropdown shows the resulting price for the selected (or cheapest) variant next to each option.

## Rounding options

| Option                | Rule                                                               | 44.37 → | 44.62 → | 45.00 → |
| --------------------- | ------------------------------------------------------------------ | ------- | ------- | ------- |
| don't round           | Keeps the exact result (two decimals)                              | 44.37   | 44.62   | 45.00   |
| round                 | Nearest whole number                                               | 44.00   | 45.00   | 45.00   |
| round with .99        | Nearest whole number, minus 0.01                                   | 43.99   | 44.99   | 44.99   |
| round upward          | Next whole number up                                               | 45.00   | 45.00   | 45.00   |
| round upward with .99 | Up to the next price ending in .99. A whole number gets .99 added. | 44.99   | 44.99   | 45.99   |

The same rounding is used on the storefront, at checkout (cart transform), on duplicate products and when you deploy, so in your store's currency the price a visitor sees is the price they pay.

## Product rules and variant rules

In the variation editor, each product has a row for **all variants** and, for products with several variants, a row per variant. Each row has a **Price** column and, if your products have compare-at prices, a **Compare price** column.

- **A variant with its own rule uses only that rule.** Product-level rules apply only to variants that have no rule of their own. A variant with neither keeps its original price.
- **Collection cards and grids** show the product-level rule. If there's no product-level rule, the default variant's rule is shown.
- **Products without a rule.** A product added to a campaign but left without rules keeps its original price in that variation.

## Behavior details and limitations

- **Duplicates follow source price changes.** With [duplicate products](https://docs.personizely.net/duplicate-products-clones), **Increase** and **Decrease** rules are recalculated when the original's price changes in Shopify. **Set** prices stay as entered.
- **Compare-at at checkout.** With [cart transform](https://docs.personizely.net/cart-transform), compare-at rules show on the storefront only, because Shopify Functions can't change compare-at prices. With duplicate products, they're written to the duplicate.
- **Savings and percent off.** If your theme shows "You save" amounts or percentages and you've configured [selectors](https://docs.personizely.net/price-campaign-css-selector) for them, they're recalculated from the new price and compare-at price. Percentages are rounded to whole numbers. A compare-at price equal to the price, and zero savings, are hidden.
- **One price campaign per product.** Personizely doesn't stop you from adding a product to two running price campaigns, but the first campaign to repaint an element wins on the storefront, and results for both are unreliable. Keep each product in one price campaign at a time.
- **Removing a product from a variation** returns it to the original price for that variation's visitors. With duplicate products, its duplicate is deleted.

## Examples

| Goal                                     | Rule                                                           |
| ---------------------------------------- | -------------------------------------------------------------- |
| Test a 10% price drop with charm pricing | Price: Decrease by 10%, round with .99 ($49.00 → $43.99)       |
| Test a +$5 price                         | Price: Increase by $5, don't round ($24.99 → $29.99)           |
| Show a sale without changing the price   | Compare price: Increase by 30%, round upward ($40.00 → $52.00) |
| Pin one size to a fixed price            | Variant "XL" price: Set to $59                                 |

## Related

- [Price testing (Shopify)](https://docs.personizely.net/product-price-shopify)
- [Cart transform](https://docs.personizely.net/cart-transform)
- [Duplicate products (clones)](https://docs.personizely.net/duplicate-products-clones)
- [Price selectors](https://docs.personizely.net/price-campaign-css-selector)
- [Price test QA checklist](https://docs.personizely.net/qa-checklist)
