2014-02-28 64 views
0

如何從雙值中獲取貨幣格式?下面的代碼片段可以很好地處理整數,但它不能與雙精度一起使用?!使用雙值的貨幣格式

#include <locale.h> 
#include <iostream> 
#include <iomanip> 
#include <sstream> 

using namespace std; 

int main(void) 
{ 
    ostringstream stream; 
    stream.imbue(std::locale("")); 
    stream << setprecision(3) <<194663.33; 
    string stringValue = stream.str(); 
    cout << stringValue; 
    return 0; 
} 
+0

我使用的是M $的Visual Studio 2012而我沒有在Linux下使用gcc面對這個問題(我用'sprintf的(緩衝,WSTRING( 「%」。3F」)' ) – mbnoimi

+0

你怎麼知道它不能用'double'工作?你能用'int'和'double'向我們展示輸出結果嗎? – 0x499602D2

+1

您不應該用二進制浮點數表示貨幣值 –

回答

1

事情是這樣的:

#include <iostream> 
#include <iomanip> 

class punct_facet: public std::numpunct<char> 
{ 
    char do_decimal_point() const { return '.'; } 
    char do_thousands_sep() const { return ','; } 
    std::string do_grouping() const { return "\03"; } 
}; 
void main() 
{ 
    std::cout.imbue(std::locale(std::cout.getloc(), new punct_facet)); 
    std::cout << std::fixed << std::setprecision(2); 
    std::cout << "Formatted number: " << 194663.33 << std::endl; 
} 

輸出:

Formatted number: 194,663.33 

您可以在這裏找到更多的信息: