I found a closed thread from January 2024 about discount rounding errors in Square for Retail. The problem is a beginner's programming error that should have been fixed in version 1 of the software, but it remains a problem today. Here's what it looks like.
Suppose I have a $3.25 item with a 15% discount. 3.25 * .85 = 2.7625 which rounds to $2.76. With 1 instance of the item in the cart, all is good:
First, everyone needs to get on the same page here and compare apples to apples. It helps to keep in mind that Square applies item-level discounts to the TOTAL QUANTITY of each item purchased. It does NOT apply it to each of any duplicated item individually, but rather in total.
If three of the same item are purchased, the discount is applied to the total of all three.
If one each of different items priced at $3.25 are purchased, the discount is applied to EACH of the items individually.
The difference between those two is what you are calling a rounding error, but is in reality just a difference in applying the discounts. But it is not a rounding error at all. Here's a screen shot of a spreadsheet I made showing both.
This is why it is never a good idea to advertise percentage discounts in exact dollar terms -- depending on the items and item mix purchased, this sort of thing happens all the time. It's basic math. It can be easily solved by just advertising the sale as 15% and then no one can complain because they will always get 15%.
@4CFC 9.75 × 0.85 = 8.287500 → 8.29
This isn’t a rounding error — it’s just a different way of applying a discount. Square Retail calculates certain percentage discounts at the cart/subtotal level, not on each individual item line.
In the example:
3 items × $3.25 = $9.75 subtotal
Apply 15% off once to that subtotal → $8.2875
Rounded to the nearest cent → $8.29
If you instead apply the discount to each item, round it, then multiply, you’d get $8.28. That’s a one-penny difference, in this case, in the business owner’s favor.
Why it’s done this way:
This approach ensures the total discount amount is exact to the percentage applied on the subtotal.
It also avoids compounding rounding on large orders.
Many retail POS systems do the same for cart-level percentage discounts.
Best practice?
It depends on the discount type and your market:
If the discount is advertised as “X% off your order,” subtotal-level calculation is the norm.
If it’s “X% off each item,” then line-level rounding is expected in some jurisdictions.
From a business perspective, this method generally results in keeping a few extra pennies over time, but it’s not a bug. It’s just how Square applies subtotal discounts, and it’s consistent with how many POS systems handle percentage-off-the-total promotions.
I think the biggest thing here is precision, if you round at each item, that mathematical imprecision is compounded as you get closer to the end.
Another undesirable side effect of Square's approach is that 2 different customers can see different discounted prices for the exact same item. That's actually how I discovered this problem. I had 5 different items in the cart, each with a discount. The cream cheese should have been $2.76 but was listed at $2.77. The example I posted was just easier to explain.
Are the total discounted prices per item properly truncated to 2 decimal places when placed in the cart? (I assume Square must be calculating discounts per item since different items might have different discounts.) If not, is it possible that the total price will not exactly equal the sum of the line prices?
So when we advertise the discounted price, we should say something like "now only $2.76 or so depending on how many and what else you buy". Got it!
I've noticed a rounding error too. It showed up when I was using Excel to work up some stats of my own and discovered that Square values for some taxes (and some Square Fees?) weren't the same as what Excel computed.
We normally only sell individual items so the previous conversation doesn't apply. HOWEVER if the item price is such that the sales taxes results in a 1/2 cent ($X.xx5) Square rounds it DOWN, where standard math says that a .5 of something is to be rounded UP.
Example 1: Item of $45.00 has a Colorado State Sales tax of 2.6% which computes to $1.305 which should round UP to $1.31. But Square rounds it DOWN to $1.30.
Example 2: That same item of $45.00 has a Town Sales Tax of 4.5% which computes to $2.025 which should round UP to $2.03, but Square rounds down to $2.02.
This leads to a problem when we have to actually pay our sales taxes and the amount is a higher that what Square charged the customer. For us, that's only a few pennies here and a few pennies there, but it adds up!
I know, this isn't a big deal, especially for a business as small as ours, but it's not right!
What gives?
My bad - Colorado State Sales Tax is 2.9% (not 2.6% as previously stated). Sorry 'bout that.
The result of the calculation was using the correct 2.9%. The main theme of the report is the same.
First, everyone needs to get on the same page here and compare apples to apples. It helps to keep in mind that Square applies item-level discounts to the TOTAL QUANTITY of each item purchased. It does NOT apply it to each of any duplicated item individually, but rather in total.
If three of the same item are purchased, the discount is applied to the total of all three.
If one each of different items priced at $3.25 are purchased, the discount is applied to EACH of the items individually.
The difference between those two is what you are calling a rounding error, but is in reality just a difference in applying the discounts. But it is not a rounding error at all. Here's a screen shot of a spreadsheet I made showing both.
This is why it is never a good idea to advertise percentage discounts in exact dollar terms -- depending on the items and item mix purchased, this sort of thing happens all the time. It's basic math. It can be easily solved by just advertising the sale as 15% and then no one can complain because they will always get 15%.
Thanks for the explanations of how Square is applying item discounts.
As I mentioned earlier in this thread (with no response), one side effect is that different receipts will show different discounted prices for the same item depending on the quantity of that item or any other items with the same discount.
We'll hope that none of our customers are paying that close attention nor comparing receipts with other customers. Otherwise, we'll have to teach our cashiers how to explain the algorithm.
Do you happen to know where to find the settings to have square NOT distribute the discount across all the items in a transaction/on the same receipt?
@NPohinaThere is no such setting. But a little explanation might help you decide the your best practices for adding discounts to carts.
There are two methods of adding discounts to a transaction -- at the item level and at the transaction level. If a discount is added to a specific item (as it is added to the cart), then Square receipts ONLY show it as discount that item. However, if a ticket-level discount is added (using the transaction level discount function), then it shows how that transaction discount applied to each item. It actually makes sense when you think about it that way.
Lastly, this is a different topic than the original topic of this thread. In order not to confuse people in the future, when you have a new question, don't hijack an existing thread but instead please start a different thread that you own. You can do that by clicking Help > (select the appropriate help board) > Start a Topic.
@NPohina Also, to clarify what I said..... IF you want a discount to apply ONLY to an item then when you add the item to the cart you must specify the discount to be applied for that item. But IF you add a discount to the transaction, instead, it automatically is spread out among all eligible items in that transaction.
Square Community
Square Products