我正在尝试使用C ++语言环境,并且无法确定输出为0.05
而不是4.98
的原因。
#include <iostream>
#include <vector>
#include <string>
#include <locale>
using namespace std;
int main(int argc, const char** argv) {
vector<string> locales;
locales.push_back("de_DE");
locales.push_back("en_AU");
locales.push_back("en_GB");
locales.push_back("zh_CN");
long double amount = 4.98;
for (size_t i = 0, s = locales.size(); i < s; ++i) {
if (locales[i] != "C") {
cout.imbue(locale(locales[i].c_str()));
cout << i << " (" << locales[i] << "): ";
const moneypunct<char>& mp = use_facet<moneypunct<char> >(cout.getloc());
const money_put<char>& mv = use_facet<money_put<char> >(cout.getloc());
cout << mp.curr_symbol();
ostreambuf_iterator<char> out(cout);
mv.put(out, false, cout, cout.fill(), amount);
cout << endl;
}
}
return 0;
}
该计划的输出如下:
0 (de_DE): Eu0,05
1 (en_AU): $0.05
2 (en_GB): £0.05
3 (zh_CN): ¥0.05
我做错了什么?
答案 0 :(得分:3)
(简化)答案是money_put<char>.put()
函数引用名为long double
的{{1}}参数。这是美分中的单位,而不是美元。
答案 1 :(得分:1)
[locale.money.put.virtuals]
参数units
被转换为宽字符序列,就像通过
ct.widen(buf1, buf1 + sprintf(buf1, "%.0Lf", units), buf2)
您可以在cppreference页面找到详尽的信息。