2011-06-16 155 views
2

有沒有一種明顯的方法來在C++中執行貨幣格式化?用C++格式化貨幣

例如:1978879將成爲1'978'879

感謝

+0

您的意思是1,978,897? – tibur 2011-06-16 14:26:33

+0

他所做的與使用德語格式規則的功能相同。 – Sven 2011-06-16 14:27:14

+0

看看''標題和文檔。 – 2011-06-16 14:27:26

回答

6

簡短的回答:

int value = 1978879; 
std::cout.imbue(std::locale("")); 
std::cout << value << std::endl; 

語言環境負責的格式。任何流都可以充滿語言環境;默認情況下它們使用全局區域設置,默認情況下是不使用任何數千個分隔符的「C」區域設置。通過創建一個空字符串作爲參數的區域設置實例,我們使用用戶的區域設置,在您的情況下可能是瑞士的。

您也可以指定明確的區域設置名稱,但根據您的平臺(Linux/Windows)名稱不同,並非所有系統都支持所有區域設置。

如果你想獲得一個字符串,最簡單的方法可能是使用一個字符串流(從<sstream>頭):

std::ostringstream stream; 
stream.imbue(std::locale("")); 
stream << value; 
std::string stringValue = stream.str(); 

雖然你也可以直接使用的語言環境的方面,但是這更復雜。

您還可以設置全局區域設置,將所有流都可以使用(除非他們特別用不同的語言環境充滿):

std::locale::global(std::local("")); 
+0

完美!感謝您的幫助 – pasta 2011-06-16 14:45:30

+0

當您完成開發並準備發佈時,您應該做的第一件事就是添加'std :: locale :: global(std :: local(「」));'因爲第一個語句是main。然後再測試一次。 – 2011-06-16 16:38:01

+0

設置區域設置後,可以使用'cout << put_money(value)'確保使用正確的貨幣格式。這確實假設「價值」是以貨幣的最小單位給出的,例如,美分或急劇,所以你可能要乘以100的價值。 – 2014-03-05 03:10:50

1

看一看標準C++本地化庫。這並不是那麼直截了當,但你可以通過num_get/numpunct方面實現。

+0

其實它的微不足道。往上看。 – 2011-06-16 16:36:39