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

Semrush - keyword research tool

Turn ChatGPT, Claude, Gemini, And CoPilot Into Your Personal Assistant, Business Coach, Content Creator, And More

AFFILIATE MARKETING Your all-in-one performance engine Manage affiliates, creators, and customer referrals in one unified platform—turning every partnership into measurable growth
Secure & Reliable Web Hosting, Free Domain, Free SSL, 1-Click WordPress Install, Expert 24/7 Support

Boost your online presence with premium web hosting and servers

Disclosure: My content contains affiliate links.

42,849 questions

55,678 answers

573 users

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

1 Answer

0 votes
using System;

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.Parse(str, System.Globalization.CultureInfo.InvariantCulture);
    }

    private static int CountOccurrences(string str, char ch)
    {
        int count = 0;
        foreach (char c in str)
        {
            if (c == ch) count++;
        }
        return count;
    }

    static void Main()
    {
        Console.WriteLine(ToFloat("1,224,533.533").ToString("F3"));
        Console.WriteLine(ToFloat("1.224.533,533").ToString("F3"));
        Console.WriteLine(ToFloat("2.354,67").ToString("F2"));
        Console.WriteLine(ToFloat("2,354.67").ToString("F2"));
    }
}



/*
run:

1224533.533
1224533.533
2354.67
2354.67

*/

 



answered Jun 27, 2025 by avibootz
...