Konwersje stringa do floata/double oraz problem niestandardowych separatorów – przecinek, kropka (C#)

C# posiada kilka przydatnych metod do zmiany typu danych z tekstowych do liczbowych (tu: zmiennoprzecinkowych):
zmiennaDouble = Convert.ToDouble(zmiennaString);
zmiennaDouble = double.Parse(zmiennaString);
zmiennaDouble = (double)innaZmiennaLiczbowa;//zmienna musi być liczbowa (int, float itp.), bo rzutowanie ze stringa niestety nie zadziała.

Co w przypadkach niestandardowych, gdy problemem jest przecinek zamiast kropki? Zobaczmy dalej.

W tym wypadku znakomitym rozwiązaniem jest zastosowanie klasy „kulturowej”, określającej, co w danych ustawieniach lokalnych jest traktowane jako separator dla typu zmiennoprzecinkowego. Cały tutorial tutaj: http://www.csharp-examples.net/iformatprovider-numbers/

A tu kod:

string line_temp = Convert.ToString(zmiennaPierwotna);
double zmienna_double = double.Parse(line_temp, CultureInfo.InvariantCulture.NumberFormat);

I inny, nieco mniej elegancki, lecz szybki sposób, na zamianę kropki na przecinek, który w naszych ustawieniach jest separatorem liczby zmiennoprzecinkowej – polega po prostu na rozbiciu liczby:

string line_temp = Convert.ToString(zmiennaPierwotna);
string [] array_temp = line_temp.Split('.');
double zmienna_double = Convert.ToDouble(array_temp[0] + "," + array_temp[1]);

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *