Forum » Programiranje » [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.
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

Glede na moje izkušnje z Borlandom pa ne gre izključevati možnosti, da je to Borlandov bug


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...
CodeGear C++ Builder 2007 in tam proba kako izpiše? Mogoče je že popravljeno napram verziji 2006...
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | c++ pretvorba malih črk v velike in obratnoOddelek: Programiranje | 1034 (823) | cosa nostra |
» | Pomoč pri programiranju v C++Oddelek: Programiranje | 1872 (1439) | amacar |
» | [C] MySQLOddelek: Programiranje | 2862 (1884) | Tutankhamun |
» | win api (c++)Oddelek: Programiranje | 2620 (1900) | Gundolf |
» | [c++] casOddelek: Programiranje | 1332 (1252) | Gundolf |