» »

[c++] Problem z locale na različnih prevajalnikih

[c++] Problem z locale na različnih prevajalnikih

zhigatsey ::

Živjo,

Stvar je taka, imam knjiznjico, ki med drugimi tudi pretvarja številke v string in obratno.
Da mi pravilno pretvori naše decimalne vejice (',') sem uporabil razred locale.. Moj namen je bil
da na začetku uporabe programa nastavim global locale na "naš" locale oz. locale sistema in
tako bodo vsi stream objekti uporabljali ta global locale... Vendar se je zataknilo, saj na
Borlandovem compilerju (Turbo C++ 2006) dobim čisto druge rezultate kot pa na Visual Studiu 2008,
saj mi v VS2008 pravilno pretvori z vejicami, Borland pa s piko in v mojem programu zato prihaja do napak...
Ali se komu da sprobati to še z g++... Je to borlandov bug? Hvala za odgovore.
#include <iostream>
#include <locale>
#include <exception>
#include <sstream>
#include <limits>
#include <string>

template<class Src, class Dest>
inline bool convert(const Src& src, Dest& dest)
{
	std::stringstream stream;

	stream.unsetf(std::ios::skipws);

	if ( std::numeric_limits<Dest>::is_specialized )
		stream.precision(std::numeric_limits<Dest>::digits10 + 1);
	else if ( std::numeric_limits<Src>::is_specialized )
		stream.precision(std::numeric_limits<Src>::digits10 + 1);

	stream << src;
	stream >> dest;
	return (!stream.fail());
}

int main(int argc, char* argv[])
{
	// Nastavim global locale na "user preferred locale" -> sloveščina
	std::locale::global(std::locale(""));
	// Dobim current locale
	std::locale locCurrent = std::locale();

	// Izpišem ime trenutnega locale-ta
	std::cout << locCurrent.name() << std::endl;
	
	// Objektu cout določim trenutni locale
	std::cout.imbue(locCurrent);

	double num = 1.5787;	
	std::string res;

	// Poskušamo pretvoriti iz številke v niz
	convert<double, std::string>(num, res);
	std::cout << res.c_str() << std::endl;	

	// Poskušamo pretvoriti nazaj
	convert<std::string, double>(res, num);
	std::cout << num << std::endl;	

	std::system("PAUSE");
	return 0;
}

iztok04 ::

Tudi meni v Turbo C++ 2006 pretvori s pikami, žal pa trenutno nimam možnosti compilat s kakim drugim compilerjem :\
Glede na moje izkušnje z Borlandom pa ne gre izključevati možnosti, da je to Borlandov bug >:D

zhigatsey ::

Tudi na linuxu g++ pravilno izpiše vejice za decimalne številke za locale "sl_SI", ima kdo mogoče
CodeGear C++ Builder 2007 in tam proba kako izpiše? Mogoče je že popravljeno napram verziji 2006...

zhigatsey ::

Na CodeGear C++ Builder 2007, pa dela pravilno, super:)


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

c++ pretvorba malih črk v velike in obratno

Oddelek: Programiranje
101034 (823) cosa nostra
»

Pomoč pri programiranju v C++

Oddelek: Programiranje
141872 (1439) amacar
»

[C] MySQL

Oddelek: Programiranje
292862 (1884) Tutankhamun
»

win api (c++)

Oddelek: Programiranje
462620 (1900) Gundolf
»

[c++] cas

Oddelek: Programiranje
51332 (1252) Gundolf

Več podobnih tem