When a percentage discount produces a fractional amount, Shopify keeps the decimals and applies the discount to the currency subunit (cents). For a store in Uruguayan pesos (UYU) this produces amounts that cannot be charged or collected as displayed.
Example from a live UYU store:
- Item price: 2,701.00 UYU
- Discount: 10% (bank transfer promotion)
- Applied discount: 270.10
- Checkout total: 2,430.90
- Correct total under local practice: 2,431 (discount 270, total rounded half up to the whole peso)
This is not a store preference. Uruguay’s central bank (BCU) withdrew the 50 centesimo coin from circulation in 2010, leaving 1 peso as the smallest denomination, so transactions are settled in whole pesos and totals with centesimos cannot actually be collected: https://www.lr21.com.uy/economia/415382-adios-a-las-monedas-de-050
The practice of rounding totals to the smallest usable currency unit is a recognized convention called cash rounding (Swedish rounding), and it is a legal or government-mandated rule in multiple countries:
I also found other countries and currencies where this is official policy:
- Sweden (SEK): rounding to the whole krona since the 50 ore coin was withdrawn in 2010.
- Canada (CAD): rounding cash totals to the nearest 5 cents, per the Government of Canada guideline after the penny was phased out in 2013
- New Zealand (NZD) and Australia (AUD): rounding to the nearest 5 or 10 cents since their smallest coins were withdrawn.
On top of that, ISO 4217 defines a whole set of currencies with no minor unit at all (minor unit 0), where whole-unit amounts are the only valid representation: JPY, KRW, CLP, PYG, ISK, VND, XOF, XAF, XPF, BIF, DJF, GNF, KMF, RWF, UGX, VUV.
More info here: ISO 4217 - Wikipedia
Proposed solution:
Support rounding of discount amounts and order totals to the currency’s smallest practical unit with standard half up rounding, either automatically per currency or as a setting exposed to Functions.
