簡體   English   中英

使用錯誤的小數點分隔符/語言的mfc程序

[英]mfc program using wrong decimal separator/language

我在Windows區域設置(葡萄牙語)中使用逗號作為小數點分隔符,並且在格式化字符串或使用atof時,我開發的所有程序都使用逗號。

但是,不管我的區域設置如何,我遇到的這個特殊程序都堅持使用點作為小數點分隔符。

我沒有在程序中的任何地方或任何其他更改語言的函數AFAIK中調用setlocale 實際上,我將這些代碼行放在InitInstance()函數的開頭:

double var = atof("4,87");
TRACE("%f", fDecimal);

在此程序中,這將產生4.000000 ,而在其他程序4,870000產生4,870000

我認為項目的屬性中肯定有一些放錯地方的設置,但是我不知道它是什么。 有人可以幫忙嗎?

那就是為什么。 C和C ++默認為“ C”語言環境。 嘗試將語言環境設置為“”: setlocale(LC_ALL,"");

確定所需的十進制分隔符時, atof依賴於C語言環境。 因此,正如另一個成員所述, setlocale(LC_NUMERIC, ""); 會將C語言環境設置為與數字相關的功能的用戶語言環境(區域設置)。 有關可用標志和語言環境名稱的更多信息,請參見MSDN頁面

對於那些不想更改您的C語言環境的人,可以使用atof_l而不是標准atol並為其提供使用_create_locale (名稱)創建的語言環境結構。

double _atof_l(const char *str, _locale_t locale);

有很多選擇。 例如,您可以使用strtod (及其Windows strtod_l對應項),這是恕我直言的更好選擇,因為它會在發生錯誤時通知您。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM