-2

I am using the following code to format the amount entered by user in EditText.

fun String.formatWithComma(): String {
    return try {
        val formatter = DecimalFormat("#,###,###")
        formatter.format(toDouble())
    } catch (ex: Exception) {
        return ""
    }
}

But when I switch the phone language to dutch, the comma is converted to dot (.). Like if user wants to type 4,323 , it is converted to 4.323.

I want to comma instead of dot even in dutch language. Any solution

Bilal Bangash
  • 207
  • 2
  • 8

3 Answers3

1

Some European countries use comma and dot in the different way than USA and England. You should add an extra line to instruct it before you use it:

formatter.decimalFormatSymbols = DecimalFormatSymbols.getInstance(Locale.ENGLISH)
AIMIN PAN
  • 1,563
  • 1
  • 9
  • 13
0

I am not sure, if this will fix your problem.

println("${"4.323.001".formatWithComma()}")

If we found multiple dots in the string, I am replacing that values, Improve this solution based on your needs.

fun String.formatWithComma(): String {
    return try {
        var lastIndexOf = this.lastIndexOf(".");
        var temp = this
        var temp2 = ""
        if(this.split(".").size >= 2)
        {
        temp = this.substring(0,lastIndexOf).replace(".","");
        temp2 = this.substring(lastIndexOf,this.length);    
        }
        
        val formatter = DecimalFormat("#,###,###.###")
        return formatter.format((temp+temp2).toDouble())
    } catch (ex: Exception) {
        return ""
    }
}
Ashvin solanki
  • 4,802
  • 3
  • 25
  • 65
0

On the basis of answer given by AIMIN PAN

Final solution to fix this issue is

fun String.formatWithComma(): String {
    return try {
        val formatter = DecimalFormat("#,###,###")
        formatter.decimalFormatSymbols = DecimalFormatSymbols.getInstance(Locale.ENGLISH)
        formatter.format(toDouble())
    } catch (ex: Exception) {
        return ""
    }
}
Bilal Bangash
  • 207
  • 2
  • 8