utilisation de boost::locale et conversion text -> nombre
Bonjour,
quelqu'un pourrait il m'éclairer sur l'usage de boost:locale. Je souhaiterais convertir des chaines de texte suivant différentes locales : typiquement FR et US.
voici un bout de code qui ne marche pas et qui lève une exception.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| string spi = "3,14";
BOOST_LOG_TRIVIAL(debug) << "try to convert " << spi;
std::locale loc= boost::locale::generator().generate("fr_FR.UTF-8");
std::locale oldloc = std::locale::global(loc);
BOOST_LOG_TRIVIAL(debug) << "change locale from : "<< oldloc.name().c_str() << " to : "<<loc.name().c_str();
char point = std::use_facet< std::numpunct<char> >(std::cin.getloc()).decimal_point();
std::locale l1;
BOOST_LOG_TRIVIAL(debug) << "locale l1 = "<<l1.name().c_str()<<" decimal sep = "<<point;
try{
double pi = boost::lexical_cast<double>(spi);
BOOST_LOG_TRIVIAL(debug) << "pi=" << pi;
}catch(boost::bad_lexical_cast & e){
BOOST_LOG_TRIVIAL(debug) << "lexical cast error : " << e.what();
} |
Cela me donne à l'éxécution la sortie suivante :
Code:
1 2 3 4
| [2020-05-06 07:50:20.628677] [0x00007fccc8355740] [debug] try to convert 3,14
[2020-05-06 07:50:20.630141] [0x00007fccc8355740] [debug] change locale from : C to : *
[2020-05-06 07:50:20.630214] [0x00007fccc8355740] [debug] locale l1 = * decimal sep = .
[2020-05-06 07:50:20.630522] [0x00007fccc8355740] [debug] lexical cast error : bad lexical cast: source type value could not be interpreted as target |
Je ne comprend pas comment réaliser mes conversions de chaine de texte contenant des nombres selon différentes locales.
merci d'avance de vos idées/explications.