Rounding and issuing change in multiple currencies

I am currently evaluating SambaPOS for use in a Dive Center in Mexico. Although tailored for restaurants, SambaPOS seems to come the closest to offering what I require, in particular layaway orders and keeping track of cash in multiple currencies.

I have a few niggles/questions that seem to have come up before on the forums, but without a specific solution being offered.


We price our services in US Dollars (USD) since the Mexican Peso (MXN) is quite volatile so if we were to have our prices in MXN then we’d be changing the price of our services daily. Therefore in the real-world we…

  • Price in USD
  • Accept USD cash
  • Accept MXN cash at the daily exchange rate (currently 1 USD = 19.5 MXN), rounded to the nearest whole peso
  • Accept MXN via Debit/Credit Card with a 5% surcharge, not rounded since the card machine can accept partial pesos

For these reasons, in SambaPOS USD is our default currency and MXN is a foreign currency

##1) Exchange rates are difficult to get right
Because of the way the exchange rate is entered in to SambaPOS the 19.5 exchange rate which we have to display by law is entered in inverse decimal form. It should be 0.05128205128… but since we are restricted to just 4 decimal places for this rate I have to enter 0.0513. This means the MXN amounts generated by SambaPOS are incorrect…

  • 700 x 19.5 should be 13650
  • 700 / 0.0513 = 13645.22

Will there ever be an option to store the exchange rate in the opposite form to how it is now? (for example store 19.5). I totally understand with the Turkish Lira being closer to the USD there small math errors are less noticable, but I have noticed a few comments from other people in countries with much bigger exchange rates that this is a real issue (in particular I saw a post from someone in Cambodia where the rate is approximately 4000 to 1 USD. I know a simple solution is to use the other currency as the the base, but the reason we are using USD in the first place is because our local currency is unstable.

##2) Cannot issue change in foreign currency when main currency is tendered
If someone chooses to pay their bill in MXN I have followed the guide on working with foreign currencies and I can choose to issue change in MXN or USD. Perfect! :slight_smile:

BUT… When the customer chooses to pay in USD I do not get the option to offer MXN in change. This is really important for me as I typically only have 10 USD as the smallest note in my cash drawer and sometimes I might need to issue 3 USD change - This is much easier to do in MXN.

Is it possible to have the option to choose foreign change even though they paid in the default currency? With this particular issue, I was wondering if adding another foreign currency called USD might be a solution. This way everyone pays in a ‘foreign’ currency (either USD or MXN) and the default currency is never actually used within SambaPOS? I would just add a USD foreign currency which is at 1:1 with the default currency. Would this cause any difficulties?

##3) Rounding applies to ticket total, not foreign currency total
I cannot seem to find a way to have rounding apply to the foreign cash button. When I add a payment processor for USD cash, it works as expected, but when the same processor is added to the MXN button, the ticket amount is rounded in USD but by the time it’s converted in to MXN it’s no longer a round number.

##4) Need to round the change given to customers
Assuming we can find a solution for item 2, then we might be faced with the scenario where the change due is 3 USD or 58.5 pesos. In this scenario, I would want to be able to round this figure to 59 pesos when the change is actually issued. How could this be achieved?

Sorry for the long post. I have really enjoyed reading through the forums over the past few days and I’ve learnt a lot about SambaPOS in that time, but these are some functional things which I just haven’t been able to find a solution for.

I look forward to any suggestions people can provide.


1 Like

I hate to be one of those people who just bump up their own posts, but does anyone have experience of working with and giving change in multiple currencies? Is this something that could be solved.

I liked your post because I think this could be handled better, and where I do business, we have a similar exchange rate.

That said, I don’t really have an issue, because I use as a default currency, the currency of the Country, rather than using the U.S. Foreign Currency as the default currency and the Country currency as the Foreign currency. Add to that, we do not accept or carry coins in either currency, so they are never given as change.

Plus, though the XR is an odd 22.38 (0.0447 inverted) and fluctuates daily, I use a hard exchange of 20 (0.05 inverted). Because I use the Country currency, this also keeps small bills (ie. a 1 bill is worth $0.05, a 5 bill is $0.25, etc.) out of my float, since nothing I have priced is less than 10 and nothing has a price that is not evenly divisible by 10, so a 10 bill is the lowest I need.

So… yes, I think the system could be handled better, however, I don’t personally have an issue with it. If I were to make $US the default and the Country currency the Foreign, and followed the XR changes daily, then it would be a problem.

Now, I have something to show you… this is a dialog that displays the currency in both amounts. You could use this type of dialog and call upon it whenever you see fit, and include a Change Amount in the dialog so that you could see how much Change to give in either currency …

Note that this does nothing to solve the 4-decimal limitation, which I agree comes up a bit “short”.

The reason I made this is for CC transactions, where I am required to enter into the CC machine the AMT, the ISV (and we have 2 different Tax Rates), and the TIP separately, and I can choose which currency to use while charging.

Thanks @QMcKay

I was really hoping to find a way to make the whole thing “idiot proof” and to be able to deal with all the transactions which we process - we often can come down to indiviual pesos. I’d be happy to round to the nearest 10, but but being about to round at all would cause me headaches.

I’ll see what I can do and keep you posted.


Wow I’m working on it but it was really harder than I’ve expected. Thank you very much @mjb2000 for your quality post, detailed explanation and letting us know these issues.

Handling rounding properly when exchange rate have that much decimal places needs some changes. I’ll let you know.

1 Like

Here is my ongoing progress. It handles change amounts and payment processors fine.

On first case we settle with base currency and make change payment on different currency. On second case MXN payment applies two payment processors. %10 discount and auto rounding.

1 Like

Keep in mind @emre, that it would be good to be able to give Change in both currencies at the same time:

XR: 20 (0.05 inverted)

Total (default): 110
Total (foreign): $5.50
Tendered: $10.00 (200 default)
Change total (default): 90
Change total (foreign): $4.50

But what if you wanted to split the Change between currencies, giving the bulk of the change in Foreign, with smaller amounts of change given in Default:

Change (foreign): $4.00 (whole bills, no coins)
Change (default): 10 (whole bills) ($0.50 foreign)

That ^ is the ultimate scenario to be able to do. And we currently do exactly that manually, calculating on-the-fly in our head, that $0.50 = 10.

OK. This is becoming even harder lol. I love challenges and that sounds like something that needs to be handled nicely however I’m thinking about that for hours but couldn’t find an idea to create a simple UI for operator to process that. I’ll sleep now. It generally helps :wink:

1 Like

Wow - Thanks for all your efforts @emre

So is your example something I can implement now, or do I need a newer release of the software?

I agree with QMcKay - issueing change in both currencies is something we do a lot too and it would be awesome if it could be handled. But I knew I was already asking a lot so I was going to handle the change in one of the currencies outside of SambaPOS.

Oh - and see what I said about our local currency being unstable. It’s about 20.8 now thanks to Mr Trump :frowning:

I implemented change payment splitting support but we really need a good idea to create a simple UI for operator. For demonstration I added a split button and it splits change equally between available choices. I know this is not what you want but to be able to hear some ideas I wanted to demonstrate how it can appear on Change Amount display and how it reflects to accounting.

What do you think?

It will release on next update. When I release it to beta I can invite you to beta group so you can help us testing it.

Same here :frowning:

1 Like

A change calculator with currency and denominations lists below the change amount in each currency.
Pressing the denominations calculates that denomination in change and recalculates the totals above?

1 Like

@JTRTech we posted almost at the same time. Did you see my latest gif?

How can we build the denomination list?

Something similar to how you can specify denominations for entering tendered amount?

I see your gif, it’s a bit quick and don’t know the currencies but how is it spit on there? Evenly over all 3?

Yes. Just to demonstrate how it works internally.

Did you understand what to was trying to suggest?
A inverse tendered amount screen - if that makes sence…

Hmm. do you suggest operator to type the amount and choose the currency?

I’m trying to find a way to do it automatic when split button is clicked :slight_smile: I guess it follows a similar pattern like … whole amount from Foreign Currency and remaining from base currency.

However it really depends on physical cash availability in that currency so allowing operator to type the amount might be a solution. I mean this is not a good solution as it is very open to typing errors but it looks like there is no better way to do it.

Also how are you defining whole amount for foreign??
If you want to split change in multiple currencies I think you need to have a way to enter change given in perticular curency.

If it shows total change in each curency and then you enter an amount and press the curency it calculates that change in that curency and updates the change due figures to the remaining it would allow you to give change in any combo of currencies you have in your system.

1 Like

I think so too. So for example, if you had clicked the US Change amount, instead of automatically using the entire US amount, a prompt appears, pre-populated with the entire amount (or maybe better, pre-populated with the “whole” (integer) US amount without the decimals), then you either change the amount or click ok.

Then, if there were no decimals to the US change given, the process is done and displays the change given (in each currency?), but if there were decimals, the process repeats with displaying the updated change amount remaining in each currency.

As an aside, thinking forward, I suppose we’ll need support for the currencies in Printer Tags, like {CHANGE AMOUNT:<currency>}, as well as Total Amount and Tendered Amount …

Well had to make a lot of changes on payment screen but I think I finally achieved something useful. Let me demonstrate it for now, I’ll upload it soon.

Case 1. Single Foreign Currency, Two Change Templates.

In this case additional change template configured for default cash account. This account have no currency assigned.

Exchange rate for MXN configured as 20.
We assume default currency is $.

On this sample we’ll tender 9$ give 40 MXN and $0.51 back.

I cleared transactions to review how it reflects to accounting and made a similar transaction. This time I selected MXN before entering tendered amount.

Same Transaction. This time I selected $ as whole change.

###Case 2: 3 Currencies. 3 Change templates

In this case I also configured a currency for default currency so with additional 2 foreign currencies (TL, MXN) we have 3 currencies. We also have 3 Change Templates.

To create an extreme case I’ll create $6.49 ticket, settle $10 and split change to 10 TL and remaining as MXN.

Bonus Uber Case :slight_smile:

Modifications I’ve made how change templates works now allows us to apply change amounts to non payment accounts. For example we can credit all or part of change amount to Customer Account.

In this case we have single foreign currency and 3 change templates. One for Default currency, one for foreign (MXN) currency and one for customer account. I’ll create two tickets to demonstrate splitting change amount or apply it as a whole.

You’ll notice Customer Credit option appears when we select a customer to ticket. For SambaCard implementation we may have additional change templates so related change buttons will appear.

I hope these features improves how you handle changes.

1 Like

That look s fantastic @emre! Can’t wait to try it out.

1 Like