Welcome to collectivesolver - Programming & Software Q&A with code examples. A website with trusted programming answers. All programs are tested and work.

Contact: aviboots(AT)netvision.net.il

Buy a domain name - Register cheap domain names from $0.99 - Namecheap

Scalable Hosting That Grows With You

Secure & Reliable Web Hosting, Free Domain, Free SSL, 1-Click WordPress Install, Expert 24/7 Support

Semrush - keyword research tool

Boost your online presence with premium web hosting and servers

Disclosure: My content contains affiliate links.

39,987 questions

51,931 answers

573 users

How to convert a string with either , or . as decimal/thousand separators into a float in Java

1 Answer

0 votes
public class LocalizedFloatParser {
    
    public static double toFloat(String input) {
        String str = input;
        int commaCount = countOccurrences(str, ',');
        int dotCount = countOccurrences(str, '.');

        int lastComma = str.lastIndexOf(',');
        int lastDot = str.lastIndexOf('.');

        if (commaCount > 0 && dotCount > 0) {
            if (lastComma > lastDot) {
                str = str.replace(".", "");
                str = str.replace(",", ".");
            } else {
                str = str.replace(",", "");
            }
        } else if (commaCount > 0) {
            str = str.replace(".", "");
            str = str.replace(",", ".");
        } else {
            str = str.replace(",", "");
        }

        return Double.parseDouble(str);
    }

    private static int countOccurrences(String str, char ch) {
        int count = 0;
        for (char c : str.toCharArray()) {
            if (c == ch) count++;
        }
        
        return count;
    }

    public static void main(String[] args) {
        System.out.printf("%.3f%n", toFloat("1,224,533.533"));
        System.out.printf("%.3f%n", toFloat("1.224.533,533"));
        System.out.printf("%.2f%n", toFloat("2.354,67"));
        System.out.printf("%.2f%n", toFloat("2,354.67"));
    }
}



/*
run:

1224533.533
1224533.533
2354.67
2354.67

*/

 



answered Jun 27, 2025 by avibootz
...