konwersja stringu

0

mam pewien problem, mam zmienną liczba w formacie string (1,23) pobrana z pliku, wiem że można użyć funkcji atof aby zamienć na double, ale rezultat:
string liczba="1,23"
cout<<atof(liczba)<<endl;
zwraca 1 a nie 1.23, dlaczego?

Domyślam się że chodzi o "," a nie kropka, tylko nie wiem jak to zmienić w stringu? lub jak zdefiniować aby część dzięsiętną definiował "przeciek" w double?
Pracuje Visual C++

Z góry dziękuję za pomoc

1
#include<iostream>
#include<stdlib.h>
#include<algorithm>

int main()
{
    std::string liczba = "1,23";
    std::replace(liczba.begin(), liczba.end(), ',', '.');
    std::cout<<atof(liczba.c_str())<<std::endl;
}
1

tak można:

std::string liczba = "1,23";

	for(int i=0; i<liczba.size(); i++)
	{
		if(liczba[i]== ',')
		{
			liczba[i] = '.';
		}
	}

	std::clog << atof(liczba.c_str());
1

Na windowsie możesz zrobić tak:

#include <iostream>
#include <cstdlib>
double atof_comma(const char* str)
{
    auto plocale = _create_locale(LC_ALL, "");

    double result = _atof_l(str, plocale);

    _free_locale(plocale);

    return result;
}

int main()
{
    std::cout << atof_comma("42,42");

    return 0;
}
0
przemyslowiec napisał(a):

tak można:

std::string liczba = "1,23";

	for(int i=0; i<liczba.size(); i++)
	{
		if(liczba[i]== ',')
		{
			liczba[i] = '.';
		}
	}

	std::clog << atof(liczba.c_str());

Dziękuje wszystkim za rady - ten sposób mi działa bez zarzutu

0

zacząć uzupełniać poprawnie plik, a nie rzeźbić w programie

1

Powyższe odpowiedzi może i działają, ale tak się tego nie robi:

#include <iostream>
#include <sstream>
#include <locale>

using namespace std;

int main() {
        double x;
        locale loc("pl_PL"); // wymusza polskie locale
        // locale loc(""); // wymusza systemowe locale
        cin.imbue(loc);

        cout << loc.name() << endl;
        while (cin >> x) // dane wejściowe "32,243 2,2342 0,000034"
        {
                cout << x << endl;
        }

        return 0;
}

Przy czym system musi wspierać polskie locale inaczej poleci exception.

1 użytkowników online, w tym zalogowanych: 0, gości: 1