WinGW g ++ put_money iomanip给出意想不到的结果

时间:2015-09-18 10:08:06

标签: g++ 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

我在Win10上使用g ++版本4.8.1

在我的Ubuntu机器上,使用版本4.8.4(Ubuntu 4.8.4-2ubuntu1~14.04)。 我得到了以下正确的结果。

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

发生了什么事?

1 个答案:

答案 0 :(得分:0)

经过更多的研究,我发现这是MinGW g ++ 4.8.1的错误。 这个版本不能很好地处理long double类型。

Long Double Output Bug In MinGW