WinGW g++ put_money iomanip дает неожиданный результат

Я пытаюсь отформатировать валюту, используя приведенный ниже код в качестве теста.

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;

Но я получаю неожиданный результат.

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

Я использую g++ версии 4.8.1, на Win10

На моей машине с Ubuntu, используя версию 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04). Я получаю следующий правильный результат.

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

Что здесь происходит??

1 ответ

После дополнительных исследований я обнаружил, что это ошибка MinGW g++ 4.8.1. Эта версия плохо обрабатывает длинный двойной тип Verry.

Длинный двойной выходной баг в MinGW

Другие вопросы по тегам