You could save the user selection in local storage OR customer account info OR session.
I would not let the system make calculations or handle transactions in anything other than your default currency, instead use the exchange rate to display the currency in the user's selection.
So maybe may a vue component that displays a price based on the underlying actual price?
then you could just use the price component anywhere a price is rendered
<Price
:currency="$attrs.user.currency_exchange_rate"
:price="price"
class="whatever you want"
/>
and the component would look something like this
<template>
<div>{{ price * currency_exchange_rate }}</div>
</template>
<script>
export default {
props:{
currency: Number,
price: Number
}
}
</script>
I dunno, I haven't worked with exchange rates before, but this is how I'd hit the problem. All I know is that currency is always stored and manipulated in the lowest denomination. Never store dollars, instead store whole cents.