2015-09-18 1 views
1

J'essaye de mettre en forme la devise, en utilisant le code ci-dessous comme test.WinGW g ++ put_money iomanip donne un résultat inattendu

long double mon = 1234567.45; // or std::string mon = "123.45"; 
std::cout.imbue(std::locale("")); 
std::cout << "normal: " << mon << std::endl; 
std::cout << "formated: " << std::showbase << std::put_money(mon*100) << std::endl; 

Mais j'obtiens un résultat inattendu.

g++ -std=c++0x -O1 -g3 -Wall -c -fmessage-length=0 -o tst.o tst.cpp 
g++ -o tst tst.o 

normal: -2.64326e-199 
formated: 526296518301961010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 

J'utilise g ++ version 4.8.1, sur Win10

Sur ma machine Ubuntu, en utilisant la version 4.8.4 (Ubuntu 4.8.4-2ubuntu1 ~ 14.04). Je reçois le résultat correct suivant.

normal: 1,12346e+06 
formated: € 1 123 456,45 

Que se passe-t-il?

Répondre

0

Après plus de recherches, j'ai découvert que c'est un bug avec MinGW g ++ 4.8.1. Cette version ne gère pas le long type double bien verry.

Long Double Output Bug In MinGW