Summary
When using a Shopify discount function with fixedAmount, the discount amount loses precision when the presentment currency differs from the shop’s base currency. Shopify appears to convert the discount to base currency, round/floor it, then convert back — causing the applied discount to differ from the requested amount.
We started noticing this behavior around January 23, 2025.
This issue is related to my previous post about Inconsistent cents rounding on discounts across different stores, but affects a different scenario: multi-currency stores using fixedAmount discounts.
Expected Behavior
When I return a fixedAmount discount of 0.70 SEK, I expect Shopify to apply a 0.70 SEK discount.
Actual Behavior
Shopify applies 0.65 SEK instead of 0.70 SEK.
Evidence
Function input:
{
"presentmentCurrencyRate": "10.769874",
"cart": {
"lines": [{
"cost": { "subtotalAmount": { "amount": "128.7" } }
}]
}
}
Function output:
{
"value": {
"fixedAmount": {
"amount": "0.7",
"appliesToEachItem": false
}
}
}
Checkout result:
| Expected | Actual | |
|---|---|---|
| Discount | 0.70 SEK | 0.65 SEK |
| Final price | 128.00 SEK | 128.05 SEK |
Analysis
It appears Shopify is doing:
- Convert discount to base currency:
0.70 / 10.769874 = 0.065 EUR - Round/floor to 2 decimals:
0.06 EUR - Convert back:
0.06 × 10.769874 = 0.65 SEK
This causes precision loss, making it impossible to apply exact discount amounts in presentment currencies with high conversion rates.
Questions
- Is this the intended behavior for
fixedAmountdiscounts? - Should the
amountfield be specified in base currency or presentment currency? - Is there a way to apply precise discount amounts in presentment currencies?
- Is this related to the changes that caused the inconsistent rounding behavior reported in my previous post?
Environment
- Discount Function API version: 2024-10
- Using
productDiscountsAddwithfixedAmount - Base currency: EUR
- Affected presentment currency: SEK (and likely others with high conversion rates)


