[英]C++ - Qt Creator - /How to have DOT and COMMA as decimal separator on a QDoubleSpinBox?
[英]How can I set the decimal separator to be a comma?
我想讀寫pi作為3,141592
而不是3.141592
,作為使用逗號是許多歐洲國家普遍。 如何使用iostream
做到這一點? 換一種說法
cout << 3.141592;
應該打印
3,141592
到標准輸出。
您應該使用basic_ios::imbue
設置首選語言環境。
在這里看看: http : //www.cplusplus.com/reference/ios/ios_base/imbue/
區域設置允許您使用用戶首選的方式,因此,如果意大利的計算機使用逗號分隔小數位,則在美國仍會使用點。 使用語言環境是一種好習慣。
但是,如果您要明確強制使用逗號,請在此處查看: http : //www.cplusplus.com/reference/locale/numpunct/decimal_point/
這是我剛剛用g ++制作的一個小示例,它強制執行char','(將分隔符作為模板參數傳遞只是出於娛樂目的,並非真正必要)
#include <iostream>
#include <locale>
template <class charT, charT sep>
class punct_facet: public std::numpunct<charT> {
protected:
charT do_decimal_point() const { return sep; }
};
int main(int argc, char **argv) {
std::cout.imbue(std::locale(std::cout.getloc(), new punct_facet<char, ','>));
std::cout << "My age is " << 3.1415 << " lightyears.\n";
}
請注意,使用cout.getloc()
在當前設置的語言環境中僅覆蓋一個方面,也就是說,在cout的當前語言環境設置中,我僅更改標點符號的執行方式。
do_decimal_point
是std::numpunct
的虛函數,您可以重新定義它以提供自定義分隔符。 打印numpunct::decimal_point
時, numpunct::decimal_point
將使用此虛擬函數。
正如@AkiRoss所說,您需要使用語言環境。 通常 ,在您編寫的任何程序中, main
首要動作之一應該是通過執行以下操作來將全局語言環境設置為用戶選擇:
std::locale::global( std::locale( "" ) );
在與人類用戶交互的每個程序中,這應該是系統的。 此后打開的所有文件將自動使用正確的語言環境。
或者,您可以顯式指定要使用的語言環境:
std::locale::global( std::locale( locale_name ) );
問題在於,語言環境名稱沒有標准。 類似於"it_IT.UTF-8"
對應於Posix標准,並在Internet上使用。 Windows傳統上使用其他格式(盡管最近的Windows似乎也接受這種格式)。
留下std::cin
, std::cout
和std::cerr
。 在輸入main
之前,這些已打開,因此必須充滿新的語言環境。 (要獲取當前全局語言環境的副本,請使用默認構造函數std::locale
。)
最后,如果要打開任何二進制文件,請注意它們也將充滿全局語言環境。 可以做代碼翻譯。 在這種情況下,您應該將std::locale::classic()
顯式地注入它們,或者通過將std::locale::classic()
的codecvt
構面與全局語言環境的其他構面合並來創建新的語言環境。 ( std::locale
為此具有特殊的功能和構造函數。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.