This is my current code:
fun getMonthlyPriceString(yearlyPriceMicros: Long, currencyCode: String): String {
val format: NumberFormat = NumberFormat.getCurrencyInstance()
format.maximumFractionDigits = 2
format.currency = Currency.getInstance(currencyCode)
return format.format(yearlyPriceMicros.toFloat() / 1_000_000f / 12)
}
This produces: "SGD 5.00". However I want a price string like "$5.00" (with the symbol) instead.
The currencyCode argument is retrieved from an external API (RevenueCat) and is in the form "EUR", "USD", "SGD", etc.
I have tried replacing the code on line 4 with
format.currency = Currency.getInstance(Locale.getDefault())
But this produces: "£5.00" which is the wrong symbol (pounds) because I am based in Singapore and thus it should be "$5.00" (singapore dollars)
Firstly, I realised my language was set to "English (United Kingdom)" which was why the price was being displayed in pounds when using
format.currency = Currency.getInstance(Locale.getDefault()). So changing my language to English (Singapore) fixed the issue.However, I still wanted to display the currency based on the given currencyCode parameter in the function despite the default locale.
Thus, I managed to use the newer
NumberFormatterapi to achieve this:Note that
NumberFormatteris only available from SDK Level 30 (Android 11) and above.