2015-11-25 1 views
0

Windows-related C++ вопрос!Почему _tcstod использует настройки моего региона Windows при разборе строки?

Я пытаюсь использовать _tcstod() для синтаксического анализа строки для получения значения поплавка. Обычно, если я называю

wchar_t* endPtr; 
float result = static_cast<float>(_tcstod("12.345678", &endPtr)); 

Я получаю значение с плавающей точкой в ​​12.345678 и endPtr ведет себя, как ожидалось. Это действительно неправильно, если я изменил свой региональный десятичный разделитель в настройках региона и языка Windows. В частности, если я изменил десятичный разделитель на «.» to ",", вдруг _tcstod возвращает только значение 12, а не все. Что-нибудь после. отрубается.

Есть ли какой-то способ для синтаксического анализа значения поплавка из строки, будучи агностиком для настроек моего региона?

ответ

0

Почему _tcstod использует параметры моего региона Windows при разборе строки?

Потому что это предполагается.

Есть ли какой-нибудь способ для синтаксического анализа значения float из строки, будучи агностиком для моих настроек в регионе?

Конечно. Самый простой способ в C++ - использовать строковый поток и наследовать его по умолчанию или по языку «C».